使用" this->"区分构造函数中的变量名称

时间:2014-11-06 16:46:27

标签: c++ visual-studio visual-studio-2013 visual-studio-6 language-specifications

我记得我曾经能够做到这一点并让它按预期工作:

class foobar
{
public:
    foobar(int x, int y)
    {
        x = x; //the variables x, y belonging to the class got correctly initialized
        y = y;
    }

private:
    int x, y;
};

以上版本在Microsoft Visual C ++ 6.0以及更高版本的版本中大约可以使用200x。我相信 但是现在我必须在Microsoft Studio 2013上执行此操作,我必须使用this->,因此:

class foobar
{
public:
    foobar(int x, int y)
    {
        this->x = x; //the other way no longer initializes class vars
        this->y = y;
    }

private:
    int x, y;
};

是否有语言规范更改或Microsoft编译器更改?

2 个答案:

答案 0 :(得分:8)

也许您正在考虑使用初始化列表语法,而明确无误,并且应该在任何(非错误的)C ++编译器上正常工作:

foobar(int x, int y) : x(x), y(y) { }

在这种情况下,parens之前的xy是明确的数据成员,因为那是唯一可以去那里的东西(除了父类型的构造函数)。在parens中,xy引用隐藏数据成员的构造函数参数。

我无法想到x = x;除了无操作自我分配之外还会做任何事情(除了用户定义的操作员超载错误)。如果这在以前的VC ++版本中有效,那么它本来就是VC ++编译器错误。更有可能的是,您曾经使用初始化列表语法(这确实有效)并忘记了您的所作所为。

答案 1 :(得分:2)

或者这个。

class foobar {
public:
    foobar(int x, int y) : x(x), y(y)
    {
    }

private:
    int x, y;
};