带模板参数的C ++大括号初始化

时间:2020-03-12 11:01:01

标签: c++ templates

我几乎可以肯定这已经在某个地方得到了回答,但是我找不到它,所以我就问一下。

编译正常

template <int SIZE, unsigned int NUMSYNC>
class MyClass{
private:
    std::uniform_int_distribution<int> randomNumberDistribution{ 0, SIZE };
}

不编译(常量SIZE不是类型名称)

template <int SIZE, unsigned int NUMSYNC>
class MyClass{
private:
    std::uniform_int_distribution<int> randomNumberDistribution( 0, SIZE );
}

与传统方法相比,我试图了解这种差异以及括号初始化的工作原理。

我正在使用C ++ 14进行编译

1 个答案:

答案 0 :(得分:4)

这是由于标准中的定义。否则,编译器在解析代码时可能无法将其与成员函数声明区分开。

2)通过默认成员初始化程序,该成员初始化程序是成员声明中包含的括号或等于初始值设定项,如果从构造函数的成员初始化程序列表中省略了该成员,则使用该默认成员初始化程序。 (我强调)

https://en.cppreference.com/w/cpp/language/data_members