我在cpp reference网站上读到了有关缩小转换的内容。我有点理解,但我不明白的是为什么错误只存在于第一行。
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
为什么错误只出现在第一行而不是第二行?
我在cpp reference网站上读到了有关缩小转换的内容。我有点理解,但我不明白的是为什么错误只存在于第一行。
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之前的初始化,不需要诊断。
有关更多详细信息,请参见cppreference.com文档。
还请参见此答案,了解为什么编译器只需要发出警告而不一定是错误。
-Wnarrowing
)。 - Jesper Juhlint a[] = {ld};
在 C++03 中是有效的,但在 C++11 中变得无效了。 - user743382