struct X {
X (int x) {}
};
int main() {
X x1(0); // nothing!
X x2 = 0; // warning: unused variable
X x3 = X(0); // warning: unused variable
}
Run Code Online (Sandbox Code Playgroud)
为什么没有生成警告x1?
我正在编译-Wall选项.
GCC和Clang都产生相同的输出.
这3行生成相同的汇编指令(asm("nop")为清楚起见放置一些):
nop
lea -0x8(%rbp),%rdi
mov $0x0,%esi
callq 400600 <X::X(int)>
nop
lea -0x10(%rbp),%rdi
mov $0x0,%esi
callq 400600 <X::X(int)>
nop
lea -0x18(%rbp),%rdi
mov $0x0,%esi
callq 400600 <X::X(int)>
nop
Run Code Online (Sandbox Code Playgroud)原始类型(例如,typedef int X)不会发生这种情况.
如果原因涉及构造函数中可能存在副作用的事实,则问题变为:为什么我会得到另外两个警告?
我使用g ++ 4.3.0编译这个例子:
#include <vector>
int main()
{
std::vector< int > a;
int b;
}
Run Code Online (Sandbox Code Playgroud)
如果我用最大警告级别编译示例,我会收到一个警告:不使用变量b:
[vladimir@juniper data_create]$ g++ m.cpp -Wall -Wextra -ansi -pedantic
m.cpp: In function ‘int main()’:
m.cpp:7: warning: unused variable ‘b’
[vladimir@juniper data_create]$
Run Code Online (Sandbox Code Playgroud)
问题是:为什么变量a没有报告为未使用?我必须传递哪些参数才能获得变量a的警告?