阴影和 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

阴影正在进行中。