我试图使用大括号初始化(感谢Visual Studio 2013实际上支持),但出于某种原因,当我在类上执行它时,它需要两组大括号。例如:
class NumberGrabber {
int number;
public:
NumberGrabber() : number{ 5 }{}
int getNumber() { return number; }
};
为什么要我说number { 5 }{}
?这对我来说并没有真正的视觉意义。
答案 0 :(得分:14)
前一组括号是number
的初始值,后者是定义构造函数体的复合语句。通过适当的格式化,这可能会变得更加清晰。
NumberGrabber()
: number{5}
{
}
这更有意义吗?
答案 1 :(得分: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";
}
Live example(适用于clang和g ++)打印5。
答案 2 :(得分:3)
构造函数是一个函数,函数定义需要一个体。 {}
是一个空函数体。