谁能给我解释一下,如果初始化器可能导致信息丢失,为什么编译器允许初始化内置类型的变量?
例如 C++ Primer,第 5 版说,如果初始化器可能导致信息丢失,编译器不会让我们列出内置类型的初始化变量。
但是我的编译器 gcc v 4.7.1 在以下代码中成功初始化了变量 a
:
long double ld = 3.1415926536;
int a{ld};
只是警告:在 { } [-Wnarrowing] 中缩小从“long double”到“int”的“ld”转换。
最佳答案
初始化列表的一个特点是不允许缩小转换。但是语言定义不区分警告和错误;当代码格式错误时,它需要“诊断”,它被定义为一组实现定义的消息中的任何消息。警告满足此要求。这是非标准扩展的机制:发出警告后,编译器可以自由地做任何它想做的事情,包括根据特定于实现的规则编译一些东西。
关于c++ - 为什么编译器允许缩小转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12873919/