我读到了关于缩小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
为什么错误只出现在第一行而不是第二行?
答案 0 :(得分:3)
因为编译器需要发出一个诊断(在你的情况下是错误)来缩小 list initialization(又名统一初始化),所以从C ++ 11。对于没有花括号的pre-C ++ 11初始化,不需要诊断。
有关详细信息,请参阅cppreference.com文档。
另见this answer,为什么编译器只需要发出警告,不一定是错误。