#include<string>
#include<iostream>
using namespace std;
class proxy
{
public:
string str{"465"};
string* operator->()
{
return &str;
}
};
class ultimate1
{
public:
string str{"456"};
string* operator->()
{
return &str;
}
};
class ultimate2
{
public:
proxy pt;
proxy& operator->()
{
return pt;
}
};
class ultimate3
{
public:
proxy pt;
proxy* operator->()
{
return &pt;
}
};
int main()
{
string a("sd"),b("asd");
string* p1 = &a;
string* p2 = &b;
if (p1 < p2)
{
cout << "bijiaol" << endl;
}
int sd = 3;
//auto obfc = [sd]() {++sd; };//lambda表达式本质是一个函数对象,按值捕获时默认不能改变捕获的值【保存在函数对象的成员中】,所以默认的operator()是const
auto obfc = [sd]()mutable {++sd; };//加了mutable关键字可以去掉const
//auto obfc = [&sd]() {++sd; };//按引用捕获的 lambda表达式其operator()不是const
obfc();
ultimate1 xx1;
char c1=xx1->at(0);
ultimate2 xx2;
char c2=xx2->at(0);
ultimate3 xx3;
//char c3=xx3->at(0); 注意裸指针与对象重载operator->成员访问运算符的触发调用区别
char c3 = xx3->operator->()->at(0);
return 0;
}
重载成员访问操作符operator->
最新推荐文章于 2022-04-19 23:12:04 发布