阴影参数

时间:2011-06-10 15:21:26

标签: c++ class parameters shadow

为什么第二个构造函数会影响第一个?

class RC2{
    private;
        bool keyset;
    public:
        RC2(uint32_t t1 = 64){
            keyset = false;
        }

        RC2(const std::string KEY, uint32_t t1 = 64){
            RC2(t1);
            //setkey(KEY);
        }
};

给了我: error: declaration of 'RC2 t1' shadows a parameter

我认为编译器无法搞清楚这些

之间的区别

我正在使用带有C ++ 0x的代码块gcc

2 个答案:

答案 0 :(得分:9)

因为RC2(t1);是局部变量声明阴影参数t1,而不是对其他构造函数的调用。以下代码也有效:

int main(int argc,char* args[])
{
  int(a);
  a = 2;
  return a;
}

请注意!在C ++ 11之前,没有办法从C ++中的构造函数调用同一个类上的另一个构造函数。如果您使用的是旧的C ++版本,请构建一个Init() - 方法,两个构造函数都会调用它。

答案 1 :(得分:4)

错误不是由构造函数声明触发的。

在第二个构造函数的块中声明类型为t1的变量RC2的行上引发错误。此变量隐藏了类似命名的t1变量,该变量将一个参数传递给构造函数。

我猜你对RC2(t1);的意图是调用另一个构造函数,但这在C ++中是不可能的。它可以在C ++ 2011中使用,但使用其他语法。