列表初始化时需要缩小转换

时间:2017-05-17 17:44:57

标签: c++ c++11 list-initialization type-narrowing

我读到了关于缩小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

为什么错误只出现在第一行而不是第二行?

1 个答案:

答案 0 :(得分:3)

因为编译器需要发出一个诊断(在你的情况下是错误)来缩小 list initialization(又名统一初始化),所以从C ++ 11。对于没有花括号的pre-C ++ 11初始化,不需要诊断。

有关详细信息,请参阅cppreference.com文档。

另见this answer,为什么编译器只需要发出警告,不一定是错误。