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

Narrowing Conversion required while list initialization

本文关键字:缩小 转换 范围 初始化 列表      更新时间:2023-10-16

我在 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

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

因为编译器需要发出诊断(在您的情况下是错误(,以便仅针对列表初始化(也称为统一初始化(缩小范围,从 C++11 开始引入。对于不带大括号的 C++11 之前的初始化,不需要诊断。

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

另请参阅此答案,了解为什么编译器只需要发出警告,而不一定是错误。