阴影和 GCC -Wshadow
Shadowing and GCC -Wshadow
不能低估 C++ 中阴影警告的重要性,但是,在某些看起来(对我来说)完全有效的代码上有一个阴影警告。
struct A{
int a;
A(int a) : a(a){}
};
在这种情况下,除了 'class member is being initialized with constructor argument' 之外,我看不出编译器如何解释这种结构。那么,这是怎么回事?
Live on coliru
这段代码怎么样?
A(int a) : a(a){ ++a; }
哪个a递增?构造函数的参数还是成员变量?
int main() {
A a(5);
std::cout << "a.a = " << a.a << std::endl;
}
// gives: a.a = 5
或者这个怎么样?
A() : a(a){ }
warning: ‘A::a’ is initialized with itself
阴影正在进行中。
不能低估 C++ 中阴影警告的重要性,但是,在某些看起来(对我来说)完全有效的代码上有一个阴影警告。
struct A{
int a;
A(int a) : a(a){}
};
在这种情况下,除了 'class member is being initialized with constructor argument' 之外,我看不出编译器如何解释这种结构。那么,这是怎么回事?
Live on coliru
这段代码怎么样?
A(int a) : a(a){ ++a; }
哪个a递增?构造函数的参数还是成员变量?
int main() {
A a(5);
std::cout << "a.a = " << a.a << std::endl;
}
// gives: a.a = 5
或者这个怎么样?
A() : a(a){ }
warning: ‘A::a’ is initialized with itself
阴影正在进行中。