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

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

最佳答案

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

2) Through a default member initializer, which is a brace or equals initializer included in the member declaration and is used if the member is omitted from the member initializer list of a constructor. (Emphasis by me)

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

关于使用模板参数的 C++ 大括号初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60652741/

相关文章:

c++ - C++ 中没有匹配的函数调用

c++ - 如何在 OpenCV 中将 16 位图像转换为 32 位图像?

c++ - Qt 图形被另一个遮挡,但仍然导致绘图更新

c++ - MSVC 2015 SFINAE 未能找到合适的成员函数

C++ 统一赋值运算符移动语义

c++ - 仅当从 C++11 中的 B 派生时,如何有条件地调用 B::f?

javascript - 自定义 JavaScript 在 Joomla 3 模板中不起作用

c++ - 从 trait 获取 const 或非常量引用类型

c++ - 模板特化 : member function with parameter different from T

c++ - 不明确的调用 - 模板化函数