何时使用*this
When to use *this?
你好,我正在研究类,我有以下代码:
Sales_Data & Sales_Data::combine(const Sales_Data & rhs){
units_sold += rhs.units_sold;
revenue += rhs.revenue;
return *this; }
我想知道我们为什么使用return *this
和Sales_Data &
。
这样做,您可以在一条语句中运行多个联合收割机:
Sales_Data d1, d2, d3;
d1.combine(d2).combine(d3);
当需要返回对自己的引用时,可以执行此操作。您通常在运算符重载中看到它,因此结果可以返回自身:
Foo &operator=(const Foo &rhs)
{
// Whatever...
return *this;
}
通过这样做,它可以让你轻松地连锁呼叫:
a=b=c;
然而,如果返回一个指针,它看起来会很乱。
它也常用于流体api设计中,以便您可以组合调用。用你的例子你可以写:
Sales_Data x,y,z;
x.combine(y).combine(z);
然而,当你有一个指针潜伏在周围时,如果真的失去了一点优雅:
Sales_Data *x=LoadSalesData();
Sales_Data y,z;
x->combine(y).combine(z);
使用*this
返回对当前对象的引用。
这通常有助于允许方法链接:
rhs1.combine(rhs2).combine(rhs3);
一个众所周知的例子是流的operator<<
,它返回对流对象的引用,以使输出的级联成为可能。
std::cout << "first" << "second";
相关文章:
- 表示"accepting anything for this template argument" C++概念的通配符
- 为什么使用 "this" 指针调用派生成员函数?
- 何时在引用或唯一指针上使用移动语义
- 如何在 C 中正确使用 libiconv 使其不会报告"Arg list too long"?
- std::vector的包装器,使数组的结构看起来像结构的数组
- 何时使函数成为类成员函数C++?
- 何时必须使操作员<<过载?
- 在命名成员函数重载解析期间,"this"何时不在范围内?
- 何时使用'this'访问自己的成员
- 为什么我的重载运算符+在向自身添加变量时会在返回时使"this"未初始化?
- 在Windows上,何时有必要将附加到目录路径上,以使_stat成功
- 在类中使用时,lambda 捕获列表中的 [this] 和 [&] 是否等效?
- 何时使用*this
- 使用构造函数时何时必须使用"this C++?
- 何时在成员函数中使用"this"指针
- C++:将'this'指针与"get"函数一起使用以替换 cout 语句的可能性
- "this"的值何时偏移?
- Apple C++ LLVM Compiler 4.x & UNICODE:何时需要?UNICODE 是默认编译器字符集吗?使代码同时编译 ANSI 和 UNICODE 版本
- C++:何时应该通过引用使用 PLUS 参数"this->"
- 如何使libcurl c++调用超时和/或知道调用中何时发生超时