关于this指针的问题
来源:8-6 前置与后置操作符
Autonomy7269969
2020-05-19
我自己查了些资料。大致总结了一下,希望老师指出不足。
this指针是类的成员函数才特有的指向入参之前构造的类对象的指针。其本质为成员函数默认的第一个参数T* const register this;
其主要作用是:
1.成员函数调用自身类对象(根据其本质的传参参数看就是在此成员函数调用前构造的类对象),以this —>,和*this分别调用对象变量以及其引用;
2.当多个成员函数返回值为类对象引用本身,而成员函数内部用this指针操作未产生新的临时构造类对象,就可以实现级联操作,即T.a().b()…,方便调用。(这里感觉总结的有问题,又想不明白,请老师指正)
this指针总结来源 https://www.cnblogs.com/zhangruilin/p/5769843.html
还有一个问题关于运算符重载的问题;
从重载的函数表达式看运算符重载函数就是一种特殊的成员函数,然后其实
//b,c为已初始化的T对象
T a = b + c; // 类似 T a = ( b + (c));
根据优先级,先进行重载后的+函数处理返回一个新的T对象(这里的(b + (c))根据+函数重载的逻辑应该为b对象调用了+函数,返回了一个新的T临时对象假设为d),再新对象返回通过=函数的操作(相当于d作为引用的对象进入a的=成员函数)返回给a;
所以其实 T a = b + c;是产生了临时构造对象的。
所以 T a += b;
// 假设T有两个int类型变量s,j
T operator += (const T& x);(… .h)
T& T::operator +=(const T&x)
{
s = this->s + x.s; // int值的计算不会出现新的T构造对象
j = this->j + x.j; // int值的计算不会出现新的T构造对象
return *this;
}
所以在某些情况下是不是重载+=操作符会效率更高?还有以上重载和运算符理解为函数思考出来的,有问题请老师严厉指正,谢谢!
1回答
-
quickzhao
2020-05-19
你说的基本对的,+=操作符一般效率高些;但你说的this指针的联级操作我并没看见多少,在返回值方面,一般而言,除非明确希望返回引用,否则还是老老实实返回对象,至于其带来的成本,可以交给编译器来优化。
00
相似问题