列表初始化时需要缩小转换范围
Narrowing Conversion required while list initialization
我在 cpp 参考网站上阅读了有关缩小转换范围的信息。我有点理解它,但我没有得到的是为什么错误只出现在第一行。
long double ld = 3.1415926536;
int a{ld}, b = {ld}; // error: narrowing conversion required
int c(ld), d = ld; // ok: but value will be truncated
为什么错误只出现在第一行而不是第二行?
因为编译器需要发出诊断(在您的情况下是错误(,以便仅针对列表初始化(也称为统一初始化(缩小范围,从 C++11 开始引入。对于不带大括号的 C++11 之前的初始化,不需要诊断。
有关更多详细信息,请参阅 cppreference.com 文档。
另请参阅此答案,了解为什么编译器只需要发出警告,而不一定是错误。
相关文章:
- 奇怪的缩小转换在 g++ 编译器中加倍到浮点警告
- 如何在不强制转换每个参数的情况下删除初始值设定项列表中从 int 到 char 的缩小转换?
- 为什么显式构造被视为(隐式)缩小转换?
- 为什么C++在将浮点数转换为字符时没有显示缩小转换错误?
- 为什么 gcc 警告只针对统一初始化缩小转换范围?
- C++ - 从 "int" 到 "unsigned char" 的缩小转换无效
- gcc在 运算符中缩小转换
- 从'::size_t'转换为'int'需要缩小转换范围
- 列表初始化时需要缩小转换范围
- 从'double'转换为'int'需要缩小转换范围
- 从“ int”到'int16_t {aka short int}'内部{}的“((int)a) -1)”的缩小转换
- 为什么缩小转换范围不能防止错误类型的map.insert()失败
- 在Linux上构建Ogre时出错:缩小转换范围
- C++ / OpenGL:纹理到像素图示例 - 缩小转换误差
- 如何禁用Visual Studio警告C4244,用于std::vector复制或使用隐式缩小转换进行赋值
- 有没有办法使用模板来避免缩小转换范围
- 如果第二个属性未支撑,则将与支撑初始化器配对缩小转换
- 如何禁用缩小转换警告
- 警告缩小转换范围(uint32 到 uint8)
- 从'float'转换为'LONG'需要缩小转换范围