gpt4 book ai didi

C++重载->,它是如何工作的?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:10:28 26 4
gpt4 key购买 nike

为什么我要在此代码中重载 -> 运算符

class subobj
{
public:
void get()
{
printf("ea");
}

};

template<typename T> class testPT
{
public:

T* operator->()
{
return ptr;
}


T* ptr;
};


int main()
{
subobj myobj;

testPT<subobj> myclass;

myclass.ptr = &myobj;



myclass->get();


return 0;
}

我打印了“ea”字符串?

通过使用“myclass->”,它应该只返回一个 T*,一个指向对象的指针。我应该做类似的事情

我的类->->get()

实际调用 get() 例程。我哪里错了?

最佳答案

operator-> 很神奇。 :)

它使用链接,这意味着只要您不返回普通指针,它就会被再次调用。当您返回一个普通指针时,它会对 operator-> 进行最后一次调用。当您调用 operator->

obj->foo;

它转化为:

(obj.operator->())->foo;

除非 obj 是一个普通指针。

你甚至可以这样做:

template<typename T> class testPT2
{
public:
T* operator->()
{
return ptr;
}
T* ptr;
};

template<typename T> class testPT
{
public:
testPT2<T> operator->()
{
testPT2<T> p2;
p2.ptr = ptr;
return p2;
}
T* ptr;
};

它仍然可以有效地应用 operator-> 三次。

关于C++重载->,它是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19725457/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com