我记得我曾经能够做到这一点并让它按预期工作:
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编译器更改?
答案 0 :(得分:8)
也许您正在考虑使用初始化列表语法,而将明确无误,并且应该在任何(非错误的)C ++编译器上正常工作:
foobar(int x, int y) : x(x), y(y) { }
在这种情况下,parens之前的x
和y
是明确的数据成员,因为那是唯一可以去那里的东西(除了父类型的构造函数)。在parens中,x
和y
引用隐藏数据成员的构造函数参数。
我无法想到x = x;
除了无操作自我分配之外还会做任何事情(除了用户定义的操作员超载错误)。如果这在以前的VC ++版本中有效,那么它本来就是VC ++编译器错误。更有可能的是,您曾经使用初始化列表语法(这确实有效)并忘记了您的所作所为。
答案 1 :(得分:2)
或者这个。
class foobar {
public:
foobar(int x, int y) : x(x), y(y)
{
}
private:
int x, y;
};