来自c ++的奇怪代码段

时间:2012-01-17 09:59:13

标签: c++ constructor initializer-list

从其他帖子中读取代码,我看到了类似的内容。

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

mem(0){}在这种情况下做了什么,特别是关于花括号?我以前从未见过这个,也不知道我会在哪里找到这个。我知道mem(0)会将mem初始化为0,但为什么{}?

感谢。

3 个答案:

答案 0 :(得分:7)

由于Foo()是类的构造函数,因此它必须具有正文,即使成员变量mem在其外部初始化也是如此。

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

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

答案 1 :(得分:2)

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

比较

int a(0);
int b = 0;

这两个做的相同,但前者更符合C ++中对象构造的外观。

答案 2 :(得分:0)

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

class MyClass
{
  public:
   MyClass(){
     .....
   }

   void doSomething(){
     .....
   }

   ~MyClass(){
     .....
   }
};

通常用于模板实现。您也可以使用这种类声明方法,以防您想要避免库链接,并且您希望向用户提供所有代码,这样他就可以包含您的文件,而无需将任何lib文件链接到他的项目。