3

我试图使用大括号初始化(谢天谢地,Visual Studio 2013 实际支持),但由于某种原因,当我在课堂上这样做时,它需要两组大括号。例如:

class NumberGrabber {
    int number;
public:
    NumberGrabber() : number{ 5 }{}

    int getNumber() { return number; }
};

为什么需要我说number { 5 }{}?这对我来说真的没有视觉意义。

4

3 回答 3

14

前一组大括号是 的初始化器number,后者是定义构造函数主体的复合语句。通过适当的格式,这可能会变得更加清晰。

NumberGrabber()
    : number{5}
{
}

这更有意义吗?

于 2013-07-24T13:20:23.023 回答
4

在 C++11 中,你也可以这样做

#include <iostream>

// look ma, no {}
class NumberGrabber {
    int number = 5;
public:
    int getNumber() { return number; }
};

int main()
{
    std::cout << NumberGrabber().getNumber() << "\n";    
}

打印 5 的实时示例(适用于 clang 和 g++)。

于 2013-07-24T13:34:36.303 回答
3

构造函数是一个函数,而函数定义需要一个主体。{}是一个空函数体。

于 2013-07-24T13:22:38.923 回答