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

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 文档。

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