You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关于C++中auto作为引用使用的困惑求解

C++中auto&推导const引用的问题解释

先看你给出的代码:

int x = 99;
    
const int& xr = x;
   
auto& xr2 = xr ;
xr2 = 88; // 报错:assignment of read-only reference 'xr2'

你之前的误解在于混淆了auto和auto&的推导规则:

  • 当使用单纯的auto(不带引用/指针)时,确实会忽略顶层const和引用限定符。比如auto a = xr,这里a的类型会被推导为int(因为xr是const int&,解引用后是const int,顶层const会被auto忽略)。
  • 但当使用auto&(引用类型的auto推导)时,会完整保留被绑定对象的cv限定符(const/volatile)和引用属性。

回到你的代码:

  • xr的类型是const int&,在它的视角里,引用的是一个const int类型的对象(即便实际绑定的是int x,xr的const限定也会限制对它的修改)。
  • 当你用auto& xr2 = xr时,auto会推导出const int,所以xr2的完整类型是const int&——这是一个只读引用,无法通过它赋值修改内容,因此编译器抛出错误。

简单总结:auto&推导时不会丢弃底层const,它会继承被引用对象的const属性,确保你不能通过这个引用修改原本被const限定的对象。

内容的提问来源于stack exchange,提问作者Suat Mutlu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 03:52:04