在C++中,可以使用不同的符号定义具有需要参数的构造函数的X类的变量x:
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发出警告:
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都是如此。
发布于 2016-09-06 00:47:58
构造函数可能会产生副作用。如果是这样的话,未使用的变量不应该是一个错误。编译器不可能知道构造函数是否有副作用,因此不会产生错误。
2,3,5是不同的,因为它们是构造和分配。
https://stackoverflow.com/questions/39338790
复制相似问题