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

3

我几乎可以确定这个问题已经有人回答过了,但是我找不到,所以我会直接问。

编译正常。

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 进行编译。


当询问与构建错误相关的代码问题时,请在问题中包含完整的完整的错误输出(作为文本粘贴)。 - Some programmer dude
1
这与模板无关。对于默认成员初始化程序,(...)根本不起作用,可能是因为很难与方法声明区分开来。 - HolyBlackCat
避免重复出现最令人烦恼的解析错误。 - Jarod42
1个回答

4
这是由于标准中的定义所致。否则,在解析代码时编译器可能无法将其与成员函数声明区分开来。
2) 通过默认成员初始化器,即包含在成员声明中的大括号或等号初始化器,如果成员在构造函数的成员初始化列表中被省略,则使用该初始化器。(强调是我的)

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接