为什么在大括号初始化成员变量后需要另一组括号?

时间:2013-07-24 13:18:46

标签: c++ c++11 default-constructor in-class-initialization

我试图使用大括号初始化(感谢Visual Studio 2013实际上支持),但出于某种原因,当我在类上执行它时,它需要两组大括号。例如:

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

    int getNumber() { return number; }
};

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

3 个答案:

答案 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)

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