gpt4 book ai didi

c++ - 关于智能指针中解引用和成员选择运算符的定义

转载 作者:行者123 更新时间:2023-11-28 06:20:13 27 4
gpt4 key购买 nike

在智能指针实现中,取消引用运算符和成员选择运算符总是定义如下。

T& operator* () const     // dereferencing operator
{
return *(m_pRawPointer);
}

T* operator->() const // member selection operator
{
return m_pRowPointer;
}

不太明白为什么前者是引用返回,后者是指针返回。只是为了区分他们还是其他一些原因?更具体地说,我可以让解引用运算符通过指针返回,而另一个通过引用返回吗?

最佳答案

why the former is returned by reference

所以表达式 *thing 给出一个 lvalue 表示类型 T 的对象,就像如果 thing 是一个指针。

the latter is returned by pointer

因为这就是指定语言的方式。请注意,您永远不会直接使用 -> 的结果,而是始终使用 thing->member 形式的表达式。

如果 thing 是类类型,则通过调用 operator-> 对其进行评估,然后将 ->member 应用于其结果。为支持这一点,它必须返回一个指针或另一种同样重载 operator-> 的类类型。

can I make dereferencing operator returns by pointer

是的,但这会让人相当困惑,因为它的行为与将相同的运算符应用于指针不同。您必须说 **thing 才能访问 T

while the other one returns by reference

不,因为这会破坏语言关于重载运算符应该如何工作的内置假设,使其无法使用。

关于c++ - 关于智能指针中解引用和成员选择运算符的定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29434001/

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