我试图使用大括号初始化(谢天谢地,Visual Studio 2013 实际支持),但由于某种原因,当我在课堂上这样做时,它需要两组大括号。例如:
class NumberGrabber {
int number;
public:
NumberGrabber() : number{ 5 }{}
int getNumber() { return number; }
};
为什么需要我说number { 5 }{}
?这对我来说真的没有视觉意义。
我试图使用大括号初始化(谢天谢地,Visual Studio 2013 实际支持),但由于某种原因,当我在课堂上这样做时,它需要两组大括号。例如:
class NumberGrabber {
int number;
public:
NumberGrabber() : number{ 5 }{}
int getNumber() { return number; }
};
为什么需要我说number { 5 }{}
?这对我来说真的没有视觉意义。
前一组大括号是 的初始化器number
,后者是定义构造函数主体的复合语句。通过适当的格式,这可能会变得更加清晰。
NumberGrabber()
: number{5}
{
}
这更有意义吗?
在 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++)。
构造函数是一个函数,而函数定义需要一个主体。{}
是一个空函数体。