c++中的奇怪代码段

Strange code segment from c++

本文关键字:代码 c++      更新时间:2023-10-16

阅读其他帖子中的代码时,我看到了这样的情况。

struct Foo {
  Foo() : mem(0) {}
  int mem;
};

在这种情况下,mem(0){}会做什么,尤其是关于花括号?我以前从未见过这件事,也不知道我还能在哪里找到这件事。我知道mem(0)会将mem初始化为0,但为什么要使用{}?

谢谢。

由于Foo()是类的构造函数,所以它必须有一个主体,即使成员变量mem在它之外初始化也是如此。

这就是为什么在您的示例中,构造函数有一个空的主体:

Foo() : mem(0)
{
    // 'mem' is already initialized, but a body is still required.
}

它定义了类的构造函数。冒号后面的部分是初始化列表,其中mem成员使用构造函数调用初始化为零。

比较:

int a(0);
int b = 0;

这两种方法是一样的,但前者更符合C++中对象构造的典型外观。

int c++您可以在.h文件中定义方法实现

class MyClass
{
  public:
   MyClass(){
     .....
   }
   void doSomething(){
     .....
   }
   ~MyClass(){
     .....
   }
};

通常用于模板实现。此外,如果您希望避免库链接,并且希望将所有代码提供给用户,以便用户可以在不将任何lib文件链接到其项目的情况下包含您的文件,则可以使用这种类声明方法。