在C++中,*this
和 (*this)
都是对当前对象的引用,但它们在语法和可读性上有所不同。
*this
:这是一个解引用操作,它表示当前对象的引用。在成员函数中,this
是一个指向调用该成员函数的对象的指针,*this
则是对这个对象的引用。(*this)
:这是对 *this
的括号包围,它实际上没有改变任何语义,但在某些情况下可以提高代码的可读性。*this
可以直接访问当前对象的成员,而不需要额外的括号。(*this)
在复杂的表达式中可以提高代码的可读性,尤其是当需要明确表示对当前对象的操作时。两者都是对当前对象的引用,因此它们的类型与当前对象的类型相同。
*this
来表示当前对象。(*this)
。class MyClass {
public:
int value;
MyClass& operator=(const MyClass& other) {
if (this != &other) {
this->value = other.value;
}
return *this; // 使用 *this 返回当前对象的引用
}
MyClass& operator+=(const MyClass& other) {
this->value += other.value;
return (*this); // 使用 (*this) 返回当前对象的引用,提高可读性
}
};
*this
?原因:返回 *this
允许链式赋值操作,例如 a = b = c;
。如果不返回 *this
,链式赋值将无法工作。
解决方法:确保重载的赋值运算符返回 *this
。
MyClass& operator=(const MyClass& other) {
if (this != &other) {
this->value = other.value;
}
return *this; // 返回当前对象的引用
}
(*this)
可以提高可读性?原因:在复杂的表达式中,使用 (*this)
可以明确表示对当前对象的操作,避免与其他操作混淆。
解决方法:在需要明确表示对当前对象操作的复杂表达式中使用 (*this)
。
MyClass& operator+=(const MyClass& other) {
this->value += other.value;
return (*this); // 提高可读性
}
通过以上解释和示例代码,希望你能更好地理解 *this
和 (*this)
在C++中的应用和区别。
领取专属 10元无门槛券
手把手带您无忧上云