通过C++中的常量引用将指针传递给对象

Adr*_* MB 3 c++ parameters pointers reference constants

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

bool graficarTablero(const Tablero *&tablero, const string &nombreArchivo);
Run Code Online (Sandbox Code Playgroud)

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

ArchivoGrafico *grafico = new ArchivoGrafico;
if(grafico->graficarTablero(tablero, ARCHIVO_GRAFICO)){ ...
Run Code Online (Sandbox Code Playgroud)

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

bool graficarTablero(Tablero* const& tablero, const string &nombreArchivo);
Run Code Online (Sandbox Code Playgroud)

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

好的,谢谢你的回答.


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

谢谢.


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

Jer*_*fin 18

从右到左阅读声明,使用"reference to"for &和"pointer to"for *.

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

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