首先理解这么一个玩意
class a
{
public:
int b()
{…..}
}
a c;
要访问b,可以这么访问c.b();
那么text().asd()的理解也就类似于c.b(),但是有些微妙之处。
首先,text()是一个函数,而这个text()函数恰恰是返回a类型对象的地址。即
a& text()
{
return *this;
}
这里a& text()不是指针函数,是一个引用返回(C++ primer把& 叫做解引用)。也就是说text()自身返回某个a类型对象的地址,也就等价于之前所说的c.b();
但网友指出,区别在于前者在内存区域中没有命名,而后者有个c的命名。而且前者可以多次访问成员,后者要多次访问就要写多次c.b()
下面是网友为了让我理解更透彻做的几个小测试
class t12
{
public:
t12& f() {std::cout << “f()” << std::endl; return *this;}
t12& operator -(int i) {std::cout << “xxx” << std::endl; return *this;}
};int main()
{
t12 tyh_123;
tyh_123 – 3 – 4 – 5;
tyh_123.f() – 3 – 4 – 5;
((tyh_123.operator -(1)).operator -(2)).operator -(3).f();
}