【发布时间】:2015-12-22 14:50:03
【问题描述】:
目前我正在自学 C++ 入门第 5 版。文字说:
当与内置类型的变量一起使用时,这种形式的初始化有一个 重要属性:编译器不会让我们列出内置类型的初始化变量,如果 初始化器可能会导致信息丢失:
示例代码如下:
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的警告,但程序成功执行。为什么?
【问题讨论】:
-
一般来说,对于违反语言规则的行为,C++ 标准要求编译器发出诊断。它做到了。该标准不区分警告和错误,并且在发出诊断后不需要任何特定行为。
-
@PeteBecker 哦,谢谢你指出!
-
@NathanOliver 我确实尝试在常见问题解答中找到答案,但考虑到他的问题标题,这非常困难。不管怎样,下次我会尽量小心一点。