为啥初始化列表允许 C++ 中的类型缩小?
Posted
技术标签:
【中文标题】为啥初始化列表允许 C++ 中的类型缩小?【英文标题】:Why is the initializer list allowing type narrowing in C++?为什么初始化列表允许 C++ 中的类型缩小? 【发布时间】:2019-01-26 13:43:21 【问题描述】:在使用 C++ 中的 初始化程序列表和原始类型时,我看到了两个不同的结果。
我只得到一个警告在
中将 d 从 double 转换为 intdouble d 3.0;
int integer d;
但是,如果我让它更明确,而不是警告,我会得到一个错误将“3.0e+0”从“double”缩小到“int”在
int integer 3.0;
如果使用 ,C++11 不应该在这两种情况下阻止任何缩小转换吗?那为什么只发生在一种情况下呢?
我正在使用最新版本的 Eclipse for C/C++ 和 MingGW。 C++14有没有可能无意中挡道?
【问题讨论】:
【参考方案1】:对于 gcc 变体,您需要指定 -Werror=narrowing
以使其成为错误而不是警告。 clang 和 vc++ 比较严格,默认会报错。
【讨论】:
这是一条线索。好的。 Bjarne 在他的书中说这是一个错误。 @softwarelover 好吧,编译器并不完美。他们中的大多数都有各种不合格的特征。 @softwarelover:标准没有“警告”和“错误”的概念。所需要的只是此类代码“格式错误”并发出诊断信息(又名:消息)。编译器仍然可以继续编译它认为合适的代码;是否这样做完全取决于编译器。 如何反其道而行之:在 clang 中将错误变成警告?以上是关于为啥初始化列表允许 C++ 中的类型缩小?的主要内容,如果未能解决你的问题,请参考以下文章