在智能指针实现中,取消引用运算符和成员选择运算符总是定义如下。
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/