关于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
相关产品推荐
相关产品推荐

