Des*_*ard 5 c++ implicit-conversion
目前我正在自学 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
Run Code Online (Sandbox Code Playgroud)
但是当我自己在 C++shell 上尝试时:
long double a=3.14159265354;
int b(a);
int c{a};
std::cout<<a<<std::endl<<b<<std::endl<<c<<std::endl;
Run Code Online (Sandbox Code Playgroud)
它只是发出警告,-Wnarrowing但程序已成功执行。为什么?
该标准规定,如果程序格式错误,则需要进行诊断。当窄化转换发生在花括号初始化器内部时就是这种情况。
也就是说,该标准不区分错误和警告。
1.3.6 诊断消息[defns.diagnostic]
属于实现输出消息的实现定义子集的消息
| 归档时间: |
|
| 查看次数: |
262 次 |
| 最近记录: |