为什么有些类方法返回"*this"(self的对象引用)?
Why do some class methods return "*this" (object reference of self)?
互联网
上有很多代码用于解释(也特别在这里,在stackoverflow上(返回*this
。
例如,从 post Copy 构造函数和 = 运算符重载 C++: 一个通用函数可能吗?
:MyClass& MyClass::operator=(const MyClass& other)
{
MyClass tmp(other);
swap(tmp);
return *this;
}
当我把交换写成:
void MyClass::swap( MyClass &tmp )
{
// some code modifying *this i.e. copying some array of tmp into array of *this
}
将 operator =
的返回值设置为 void
并避免返回*this
还不够吗?
这个习惯用法的存在是为了启用函数调用的链接:
int a, b, c;
a = b = c = 0;
这适用于int
,因此没有必要使其不适用于用户定义的类型:)
对于流运算符也是如此:
std::cout << "Hello, " << name << std::endl;
工作原理与
std::cout << "Hello, ";
std::cout << name;
std::cout << std::endl;
由于成语return *this
,可以像第一个例子一样链接。
返回
*this
以允许像a = b = c;
这样的赋值链的原因之一,它等同于b = c; a = b;
。一般来说,赋值的结果可以在任何地方使用,例如在调用函数(f(a = b)
(或表达式(a = (b = c * 5) * 10
(时。虽然,在大多数情况下,它只会使代码更加复杂。
当强烈感觉到您将在对象上调用相同的操作时,您会返回*this
。
例如,std::basic_string::append
返回自身,因为有一种强烈的感觉,即您将想要附加另一个字符串
str.append("I have ").append(std::to_string(myMoney)).append(" dollars");
operator =
也是如此
myObj1 = myObj2 = myObj3
swap
没有这种强烈的感觉。 表达obj.swap(other).swap(rhs)
似乎很常见吗?
相关文章:
- 返回常量对象引用 (getter) 和仅返回字符串有什么区别?
- 我们可以有一个 setter 成员函数作为从 const 对象引用的 const 吗?
- C++对象引用返回不同的值
- 对象引用中的字段以不同的方法返回不同的值
- 通过向构造函数其他对象引用页面来创建对象
- 为什么在对象引用恒定时允许更改为另一个类的指针的成员变量
- 如何在C++中读取 HDF5 对象引用
- C++ 未定义的对象引用
- 从函数返回 libconfig 类设置对象引用
- qt vsaddin错误对象引用未设置为对象的istanse
- 在这种情况下,为什么使用 *此必需的对象引用返回对象引用
- 基本C - 构造contaning对象引用,并将其作为方法参数传递
- C :将对象引用作为参数给出错误:呼叫class :: function()的匹配函数
- C++OOP基础知识-是否正确返回对象引用
- 使用对象引用(可能)在调用destructor后使用对象引用
- 创建返回对象引用的成员函数的最简单方法
- 如何在C++上使用对象引用删除对象
- JNI/Android NDK-维护全局对象引用
- 为什么有些类方法返回"*this"(self的对象引用)?
- 在C++中返回伪对象引用的规则