缩小列表初始化的转换是错误还是警告?

时间:2015-12-22 14:50:03

标签: c++ implicit-conversion

目前我是自学C ++入门第5版。文字说:

  

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

以下是示例代码:

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 个答案:

答案 0 :(得分:1)

标准规定,如果程序格式错误,则需要诊断。当在支撑初始化器内发生缩小转换时就是这种情况。

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

1.3.6诊断消息[defns.diagnostic]

  

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