列表初始化时需要缩小转换
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
为什么错误只出现在第一行而不是第二行?
因为编译器需要发出诊断(在您的情况下为错误)以缩小 仅 为 list initialization (a.k.a。uniform initialization),从 C++11 开始引入。对于没有花括号的 C++11 之前的初始化,不需要诊断。
有关详细信息,请参阅 cppreference.com 文档。
另见 为什么编译器只需要发出警告,不一定是错误。
我在 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
为什么错误只出现在第一行而不是第二行?
因为编译器需要发出诊断(在您的情况下为错误)以缩小 仅 为 list initialization (a.k.a。uniform initialization),从 C++11 开始引入。对于没有花括号的 C++11 之前的初始化,不需要诊断。
有关详细信息,请参阅 cppreference.com 文档。
另见