2

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

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 和一些更高版本上的工作时间约为 200 倍。
但现在我必须在 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 编译器更改?

4

2 回答 2

8

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

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

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

x = x;除了无操作自赋值(错误的用户定义赋值运算符重载除外)之外,我想不出任何情况下会做任何事情。如果这在以前的 VC++ 版本中有效,那么它将是一个 VC++ 编译器错误。更有可能的是,您曾经使用初始化列表语法(确实有效)并且忘记了您所做的。

于 2014-11-06T16:56:29.860 回答
2

或这个。

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

private:
    int x, y;
};
于 2014-11-06T16:56:57.910 回答