对指向 const 对象的非常量指针的非常量引用

2023-11-22

简而言之,我有一个简单的指针:

int* a;

现在,我想改变这个指针的值。我想在一个函数中执行此操作。函数确保它不会更改指针指向的对象,但会更改指针本身。这就是为什么我希望这个函数采用这样的参数:非常量引用(因为指针的值将被更改)到指向常量对象的非常量指针(指针本身可以更改)(函数保证该对象,该指针指向的内容不会改变)。

最简单的函数是:

void function(const int*& a){
    a = 0;
}

但是当我尝试调用这个函数时:

int main(){
    int* a;
    function(a);
    return 0;
}

编译器不高兴地说:

从“const int*”类型的右值对“const int*&”类型的非常量引用进行无效初始化 函数(a);

我不太理解这个错误,因为对我来说不涉及右值(我正在传递对对象的引用,该对象已经存在于堆栈中。)

问题是,我怎样才能正确地做到这一点?

示例可以在这里找到:https://ideone.com/D45Cid


EDIT:

有人建议,我的问题类似于为什么将“指向非常量指针的指针”转换为“指向常量指针的指针”不合法

我的问题不同,因为我不使用指向指针的指针,我只使用指向对象/值的指针并存储对其的引用,因此情况类似于该问题的答案:

const char c = 'c';
char* pc;
const char** pcc = &pc;   // not allowed
*pcc = &c;
*pc = 'C';                // would allow to modify a const object

在我的情况下是不可能的,因为我无法取消引用顶级指针(我没有这样的指针)。

此外,我对这个问题的良好和干净的解决方案提出了疑问,这没有在问题中涵盖


我不太理解这个错误,因为对我来说不涉及右值(我正在传递对对象的引用,该对象已经存在于堆栈中。)

int* and const int*是不同的东西。当你通过时a类型的int* to function(const int*&),它需要隐式转换为const int*首先,它是临时的,即右值,不能绑定到非常量引用。这就是编译器抱怨的原因。

问题是,我怎样才能正确地做到这一点?

您可以更改类型a或参数类型function()使它们完全匹配(可能是const int*如果你不会改变指针指向的值),以避免隐式转换和临时变量。或者正如 @TartanLlama 建议的那样,返回指针的新值function().

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

对指向 const 对象的非常量指针的非常量引用 的相关文章

随机推荐

  • Castle Windsor:如何从代码中指定构造函数参数?

    假设我有以下课程 MyComponent IMyComponent public MyComponent int start at 我可以通过 xml 向温莎城堡注册它的实例 如下所示
  • Google Play 说明中从一个应用程序到另一应用程序的链接

    我在 Google Play 商店中有两个应用程序 是否可以在第一个描述中创建从一个到另一个的 http 链接 Google Play 说明不支持链接 那不是真的 您可以添加指向 Google Play 中其他应用程序的链接 a tag 例
  • 带有 Java 5 的泽西岛

    可与 Java 5 一起运行的最新版本的 Jersey 是什么 我找到了泽西岛 1 3 文档说需要 Java 6 但我在查找以前版本的文档时遇到了麻烦 如果你被 Java 5 困住了 你需要使用球衣1 2 如果版本对你来说还不够成熟 请尝试
  • usr/bin/ld: 找不到 -l

    我正在尝试编译我的程序 但它返回此错误 usr bin ld cannot find l
  • android蓝牙连接在489次成功连接后失败

    不幸的是 我的安卓蓝牙有一些问题 对于我的测试环境 我使用带有 Android 4 4 2 的 Nexus 4 我的 PC 上有一个 Java 应用程序 它使用 bluecove 作为客户端建立 SPP 连接 该程序正在寻找特殊的服务名称并
  • 在 Mac 上安装 pycurl

    我对 python 非常陌生 需要帮助在我的机器上安装 pycurl 库 我现在正在运行 python 2 7 一个简短的教程将不胜感激 使用两种方法之一 方法一 须藤easy install pycurl 方法二 pip 安装 pycur
  • SSE2 有符号整数溢出未定义吗?

    有符号整数溢出在 C 和 C 中未定义 但是 有符号整数在单个字段内溢出又如何呢 m128i 换句话说 这种行为是在英特尔标准中定义的吗 include
  • Java - 将字符串转换为有效的 URI 对象

    我正在尝试获得一个java net URI对象从一个String 该字符串包含一些字符 需要用其百分比转义序列替换 但是当我使用 URLEncoder 用 UTF 8 编码对字符串进行编码时 甚至 也被替换为转义序列 如何从 String
  • Linq Dynamic ParseLambda 无法解析

    我正在尝试使用我在这里找到的示例代码来完成我正在处理的事情 如何将字符串转换为其等效的 LINQ 表达式树 在解决方案中 作者使用了以下内容 var e DynamicExpression ParseLambda new p null ex
  • MVC自定义roleprovider如何将其挂接到HttpContext.Current.User.IsInRole("myrole")

    我有一个 MVC 应用程序 我为其编写了一个自定义角色提供程序 如下所示 using System using System Collections Generic using System Linq using System Web us
  • 单击“下一步”按钮后,如何将 ListView 中的列表项显示限制为 10 和下 10 个

    我有一个包含 100 个项目的列表视图 我想显示前 10 个项目 单击 下一步 按钮时 我必须显示下一个 10 个项目 即从 11 到 20 我有获取前 10 个项目的代码 public int getCount return 10 但如何
  • 从文本中提取位置的方法?

    从自由文本中提取位置的推荐方法是什么 我能想到的是使用正则表达式规则 例如 单词 在位置 但还有比这更好的方法吗 我还可以考虑建立一个包含国家和城市名称的查找哈希表 然后将文本中提取的每个标记与哈希表的标记进行比较 有人知道更好的方法吗 编
  • 错误:require.paths 被删除。使用node_modules文件夹或NODE_PATH环境变量代替

    我刚刚新安装了 Node js 现在我尝试运行一个简单的脚本 但收到以下错误消息 Error require paths is removed Use node modules folders or the NODE PATH enviro
  • UI- 路由器 -- 在每次路由更改时运行函数 -- 状态名称位于哪里?

    使用 Angularjs 和 UI Router 尝试在每次状态更改时运行一个函数 rootScope on stateChangeStart function toState if toState login UsersService r
  • 如何取消操作表

    我使用此代码在 uiactionsheet 中显示 uipicker 但是当我单击关闭按钮时 我想从视图中删除操作表 那么删除 actionSheet 表单视图的代码应该是什么 BOOL textFieldShouldBeginEditin
  • JavaScript 初学者:在 JavaScript 中使用 JSON 和对象

    我有一些 JSON 返回到浏览器 就像这个 产品 Title School Bag Image images school bag jpg 我希望这些数据成为 产品 对象 这样我就可以使用原型方法 例如toHTMLImage 返回产品的 H
  • 金字塔和 .ini 配置

    每个 Pyramid 应用程序都有一个关联的 ini 文件 其中包含其设置 例如 默认值可能如下所示 app main use egg MyProject pyramid reload templates true pyramid debu
  • java中数组循环左移n个位置

    我正在尝试仅使用单个一维数组将数组循环左移 n 个位置 我可以在两个数组中完成它 但我还没有弄清楚如何使用一个数组来完成它 请提出您的建议 实际上有一个聪明的算法可以做到这一点 我们将使用A来表示数组 N表示数组大小 以及n表示要移动的位置
  • ERROR 1048 (23000) 列不能为 NULL,但我正在插入有效数据

    Stack Overflow 上有大量这样的帖子 但是从大约 20 个帖子来看 它们要么是在与 MySQL 接口时遇到编码错误 我不想这样做 要么只是想要空值 但其表定义不正确 我在 MySQL 5 6 19 中看到一个错误 其中有一列不允
  • 对指向 const 对象的非常量指针的非常量引用

    简而言之 我有一个简单的指针 int a 现在 我想改变这个指针的值 我想在一个函数中执行此操作 函数确保它不会更改指针指向的对象 但会更改指针本身 这就是为什么我希望这个函数采用这样的参数 非常量引用 因为指针的值将被更改 到指向常量对象