代码之家  ›  专栏  ›  技术社区  ›  kreuzerkrieg

阴影和GCC-Wshadow

  •  0
  • kreuzerkrieg  · 技术社区  · 7 年前

    人们不能低估C++中阴影警告的重要性,然而,在我看来,在某些代码上有一个阴影警告是完全有效的。

    struct A{
        int a;
        A(int a) : a(a){}
    };
    

    在这种情况下,除了“类成员正在使用构造函数参数初始化”,我不知道编译器如何解释这种构造。那么,这是怎么回事?
    Live on coliru

    1 回复  |  直到 7 年前
        1
  •  4
  •   Goswin von Brederlow    7 年前

    这个代码呢?

    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
    

    阴影正在继续。