列表初始化的缩小转换是错误还是只是警告? [复制]

2024-06-19

目前我正在自学C++入门第五版。文字说:

当与内置类型的变量一起使用时,这种形式的初始化有一个 重要属性:编译器不会让我们列出内置类型的初始化变量,如果 初始化程序可能会导致信息丢失:

这是示例代码:

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++shell 上尝试时:

long double a=3.14159265354;
 int b(a);
 int c{a};
 std::cout<<a<<std::endl<<b<<std::endl<<c<<std::endl;

它只是给出一个警告-Wnarrowing但程序成功执行。为什么?


该标准规定诊断如果程序格式不正确,则需要。当窄化转换发生在花括号初始化器内部时就是这种情况。

也就是说,该标准不区分错误和警告。

1.3.6 诊断消息[defns.diagnostic]

消息属于实现定义的子集 实现的输出消息

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

列表初始化的缩小转换是错误还是只是警告? [复制] 的相关文章

随机推荐