初始化器中的 this 关键字用于歧义解决
this keyword in initilizer for ambiguity resolution
我遇到了使用与以下名称相同的参数初始化成员数据的方法:
class T {
int x;
public:
T(int x) : x(x) {} // assign parameter x to T::x
};
它运行良好。但是当我尝试使用 this 关键字显式初始化时,
发生错误。
T(int x) : this->x (x) {} // error
谁能解释错误的原因?
根据member initializer list的语法,这里应该是标识符,而this->x
不是。
class-or-identifier ( expression-list(optional) )
class-or-identifier - any identifier, class name, or decltype expression that names a non-static data member, a direct or virtual base, or (for delegating constructors) the class itself
如上所示可能的标识符,x(x)
很好,没有歧义,根本不需要使用this->
。
你不能那样使用初始化列表。如果您想要等效的行为,则必须将赋值放在定义中。
class T {
int x;
public:
T(int x) {
this->x = x;
}
};
要初始化的成员已被放入初始化列表中,因此已消除歧义。尝试使用 this
来引用成员是错误的。用于构造成员的值同样没有歧义,因为您不能从自身构造成员。这就是允许您对成员和构造函数参数使用相同名称的原因。
我遇到了使用与以下名称相同的参数初始化成员数据的方法:
class T {
int x;
public:
T(int x) : x(x) {} // assign parameter x to T::x
};
它运行良好。但是当我尝试使用 this 关键字显式初始化时, 发生错误。
T(int x) : this->x (x) {} // error
谁能解释错误的原因?
根据member initializer list的语法,这里应该是标识符,而this->x
不是。
class-or-identifier ( expression-list(optional) )
class-or-identifier - any identifier, class name, or decltype expression that names a non-static data member, a direct or virtual base, or (for delegating constructors) the class itself
如上所示可能的标识符,x(x)
很好,没有歧义,根本不需要使用this->
。
你不能那样使用初始化列表。如果您想要等效的行为,则必须将赋值放在定义中。
class T {
int x;
public:
T(int x) {
this->x = x;
}
};
要初始化的成员已被放入初始化列表中,因此已消除歧义。尝试使用 this
来引用成员是错误的。用于构造成员的值同样没有歧义,因为您不能从自身构造成员。这就是允许您对成员和构造函数参数使用相同名称的原因。