gpt4 book ai didi

c++ - 在 C++ 中通过常量引用传递指向对象的指针

转载 作者:太空狗 更新时间:2023-10-29 23:24:50 25 4
gpt4 key购买 nike

我正在为大学做一项实践作业,但遇到了一个问题。我有一个声明此方法的类:

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

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

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

...我遇到编译错误。好的,我不会详细说明我得到的错误,因为我认为我已经找到了解决方案,方法是替换以下方法 header :

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

现在 SEEMS 可以工作(至少它现在可以编译),但我想知道为什么第一个声明不起作用而第二个声明起作用的原因。好吧,更重要的是,我真正想知道的是它们是否真正意味着同一件事(通过常量引用指向对象的指针)。

好的,谢谢你的回答。


编辑 1:我想做的是避免按值(value)传递。好吧,我知道这并不是一个真正昂贵的操作,但真的没有办法使用同一个指针并保证它不会以任何方式被修改吗?

谢谢。


编辑 2:抱歉,我没有仔细阅读 Jerry Coffin 的回答。是的,这就是我要找的。并不是说我真的必须这样做,但有一天我可能会发现这种小优化很有用。

最佳答案

从右到左阅读声明,对 & 使用“引用”,对 * 使用“指向”。

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

我很难找出后者有用的情况——如果您要传递一个 const 引用,您也可以只传递指针本身的拷贝。 const 引用通常主要用作按值传递的替代方法,但避免复制该值,因此它主要在您的值很大时有用(例如,一个大的 std::vector或者那个订单上的东西)。在指针的情况下,您也可以按值传递它(因为复制指针通常非常便宜)。通常,如果您通过引用传递指针,那么您可以修改指针——但在这种情况下,const 会阻止这种情况。

关于c++ - 在 C++ 中通过常量引用传递指向对象的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16071305/

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