' - >'和'。'用于引用对象?

时间:2013-02-26 20:09:15

标签: c++

我正在编写一个代码库,我遇到了一些让我感到难过的东西,或者至少让我三思而后行。

我有一个通过引用传递的函数的参数,如下所示:

const PathTile &refTile

在函数中的某一点,pathTile的成员函数被访问,就像人们期望的那样,使用->运算符,只需使用{{{ 1}}运算符。奇怪的是代码工作。使用.时隐含此->吗?

我问,因为我不确定前一个人是否有意这样做过。我应该改变吗?

4 个答案:

答案 0 :(得分:4)

  

在函数中的某一点,pathTile的成员函数被访问,就像人们期望的那样,使用 - >操作

这是不正确的。通常应通过.访问引用成员。正如Seth在评论中指出的那样,->可以重载......当你想假装你的类型是一个指针时,这很有用。 .不能超载。

  

这是 - >隐含的时候。用的是??

不,必须有另一种解释。 (立即想到不同的变量和重载的->

答案 1 :(得分:2)

有一些称为智能指针的特殊对象,其使用方法与常规指针几乎相同。提供他们重载运算符 - >但它们是真实的物体,所以你可以通过它们调用自己的方法。这样:

struct Foobar { void method(); };
smart_pointer<Foobar> spointer;
spointer->method(); // called method() of class Foobar of instance where spointer points to
spointer.reset();   // called reset() of object spointer itself.

如果你使用引用没有区别,所以如果上面的例子中的spointer是一个引用类型smart_pointer它将是相同的。

答案 2 :(得分:1)

这可能与你可以这样做有关:

foo *x=new foo();
foo &y=*x;

现在:

x->bar();

y.bar();

是等同的,合法的,有效的,将编译,并做同样的事情等。

请更多代码

答案 3 :(得分:0)

不,访问次数不同/可互换只是因为它们是引用。

一种常见的情况是引用的对象是容器对象(即智能指针); obj.member可以访问容器成员,同时obj->member可以通过operator->()的标记方便来指定访问包含对象的成员。

我会PathTile检查operator->()