我正在为大学做一个实际的任务,我遇到了一个问题。 我有一个声明这个方法的类:

bool graficarTablero(const Tablero *&tablero, const string &nombreArchivo);

我想通过常量引用传递指向对象Tablero的指针。 如果我称这个函数为例如,例如:

ArchivoGrafico *grafico = new ArchivoGrafico;
if(grafico->graficarTablero(tablero, ARCHIVO_GRAFICO)){ ...

...我收到编译错误。 好吧,我不会详细说明我得到的错误,因为我认为我已经找到了一个解决方案,通过替换方法标题:

bool graficarTablero(Tablero* const& tablero, const string &nombreArchivo);

现在SEEMS工作了(至少它现在编译),但我想知道的是第一个声明在第二个声明不起作用的原因。 好吧,更重要的是,我真的想知道它们实际上是指同一个东西(通过常量引用指向对象)。

好的,谢谢你的回答。


编辑1:我想做的是避免通过价值。 好吧,我知道这不是一个非常昂贵的操作,但是真的没有办法使用相同的指针,并承诺它不会以任何方式被修改吗?

谢谢。


编辑2:对不起,我没有仔细阅读Jerry Coffin的回答。 是的,这就是我想要的。 这不是我真的必须这样做,但我可能会发现有一天很少有优化。

===============>>#1 票数:17 已采纳

从右到左阅读声明,使用“引用”代表&和“指向” *代表*

  1. const Tablero *&tablero => tablero是对指向const Tablero的指针的引用
  2. Tablero* const& tablero => tablero是对指向Tablero的const指针的引用

我很难弄清楚后者会有用的情况 - 如果你要传递一个const引用,你也可以只传递一个指针本身的副本。 const引用通常主要用作传递值的替代方法,但是避免复制值,因此它主要在您的值很大时有用(例如,大型std::vector或该命令中的某些内容)。 在指针的情况下,您也可以通过值传递它(因为复制指针通常非常便宜)。 通常,如果您通过引用传递指针,那么您可以修改指针 - 但在这种情况下, const阻止它。

  ask by Adri MB translate from so

未解决问题?本站智能推荐: