首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >gcc警告使用不同构造函数初始化程序列表的“变量集但未使用”

gcc警告使用不同构造函数初始化程序列表的“变量集但未使用”
EN

Stack Overflow用户
提问于 2016-09-05 23:33:28
回答 1查看 610关注 0票数 0

在C++中,可以使用不同的符号定义具有需要参数的构造函数的X类的变量x:

代码语言:javascript
运行
复制
X x{...};      // modern style (1)  
X x = {...};   // slightly more verbose modern style (2)  
X x = X{...};  // verbose modern style (3)
X x(...);      // old '98 style (4)
X x = X(...);  // verbose old '98 style (5)  

如果对象x随后未被使用,gcc发出警告:

代码语言:javascript
运行
复制
variable ‘x’ set but not used  

仅在使用=的情况(2)、(3)和(5)中,而在案例(1)和(4)中不使用。

在这种情况下,不是也应该发出警告吗?

我在Linux下使用gcc版本6.1.1 20160511和-Wall -Wextra -Wpedantic -std=c++14

我也试图进一步调查clang编译器。有趣的是,clang只对案例(3)和(5)发出警告,而不对其他情况发出警告。请参阅https://godbolt.org/g/qW712c

我还试图比较这5个不同版本的程序集输出。所有5个版本的汇编代码都是字节对字节相同的,gcc和clang都是如此。

EN

回答 1

Stack Overflow用户

发布于 2016-09-06 00:47:58

构造函数可能会产生副作用。如果是这样的话,未使用的变量不应该是一个错误。编译器不可能知道构造函数是否有副作用,因此不会产生错误。

2,3,5是不同的,因为它们是构造和分配。

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

https://stackoverflow.com/questions/39338790

复制
相关文章

相似问题

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