在c++引物(5)中,它提到:
当与内置类型的变量一起使用时,这种形式的初始化具有一个重要属性:如果初始化程序可能导致信息丢失,编译器将不允许我们列出内置类型的初始化变量:
longdouble ld = 3.1415926536;
int a{ld}, b = {ld}; // error: narrowing conversion required
int c(ld), d = ld; // ok: but value will be truncate我使用gcc4.8.1编译代码,它只给出警告而不是错误。
g++ -W -Wall -Wextra -pedantic -std=c++0x -o m main.cpp
main.cpp: In function ‘int main()’:
main.cpp:64:13: warning: narrowing conversion of ‘ld’ from ‘long double’ to ‘int’ inside { } [-Wnarrowing]
int a{ld}, b= {ld};
^
main.cpp:64:22: warning: narrowing conversion of ‘ld’ from ‘long double’ to ‘int’ inside { } [-Wnarrowing]
int a{ld}, b= {ld}; 是否有任何标志将打开重要属性的特性?
发布于 2013-07-10 00:35:15
快速搜索"gcc诊断标志“可以找到文档资源。
在您的程序中,您可以这样做:
#ifdef __GNUC__
# pragma GCC diagnostic error "-Wnarrowing"
#endif还有一个命令行选项:-Werror=narrowing,但根据GCC的说法,由于您想要更改程序本身的语义,将其放在源代码中可能更合适。
请注意,除了简单的良好构造性(如过载选择)之外,GCC确实正确地诊断了病情。
发布于 2013-07-10 00:59:53
该标准从不调用错误或警告:该标准只需要一个实现来发出诊断。这类诊断是否以编译器错误、警告或与两者完全不同的形式出现,都超出了标准的范围。
https://stackoverflow.com/questions/17560389
复制相似问题