首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在用圆括号初始化时没有关于缩小范围的警告

在用圆括号初始化时没有关于缩小范围的警告
EN

Stack Overflow用户
提问于 2013-06-20 15:00:13
回答 1查看 362关注 0票数 8

我无意中发现了一种令人困惑的情况,我发现一个明显的缩小转换,但我感到失望的是,编译器(gcc-4.7.2)没有提出警告,尽管-Wall -Wnarrowing -pedantic标志。请参阅下列节目:

代码语言:javascript
复制
struct A {
  int m;
  A( int m ) : m(m) {};
};

int main() {
  unsigned long v = 0;
  A a1(v);  // narrowing, but no warning (should this not cause a warning?)
  A a2{v};  // narrowing, warning raised (expected)
}

a1的初始化似乎没有编译器的窥视。为了确保我没有发疯,我尝试以同样的方式初始化a1,但使用的是大括号而不是家长。编译器警告在第二种情况下要缩小范围,就像预期的那样。

要明确的是:我并不是在问缩小初始化列表中转换的合法性。我知道这是不合法的-- a2的花括号初始化仅仅是一个理智的检查。我的问题与初始化列表无关。这不是一个重复的问题.

如果编译器不警告我要缩小a1初始化的范围

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-06-20 17:36:09

Wsign-conversion将为这一行代码生成警告--当unsigned longint具有相同的大小时,unsigned long不会产生警告(在许多平台上,甚至在一些64位平台上都是如此)。对于C代码,-Wconversion将隐式地启用-Wsign-conversion,但由于某种原因,C++不会出现这种情况。

如果将v类型更改为long long,则-Wconversion本身将生成一个警告(假设int为32位)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17217101

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档