什么是常数参考? (不是对常量的引用)

新手上路,请多包涵

为什么常量引用的行为方式与常量指针不同,以便我可以实际更改它们指向的对象?它们真的看起来像是另一个简单的变量声明。我为什么要使用它们?

这是我运行的一个简短示例,它编译并运行没有错误:

 int main (){
    int i=0;
    int y=1;
    int&const icr=i;
    icr=y;          // Can change the object it is pointing to so it's not like a const pointer...
    icr=99;         // Can assign another value but the value is not assigned to y...
    int x=9;
    icr=x;
    cout<<"icr: "<<icr<<", y:"<<y<<endl;
}

原文由 Bat0u89 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 408
2 个回答

最明确的答案。 “X& const x”有意义吗?

不,这是胡说八道

要了解上述声明的含义,请从右到左阅读:“x is a const reference to a X”。但这是多余的——引用始终是 const 的,因为您永远无法重新设置引用以使其引用不同的对象。绝不。有或没有 const。

换句话说,“X& const x”在功能上等同于“X& x”。由于在 & 之后添加 const 没有任何好处,因此不应该添加它:它会使人们感到困惑 — const 会使某些人认为 X 是 const,就好像您说过“const X& x”一样。

原文由 Bat0u89 发布,翻译遵循 CC BY-SA 4.0 许可协议

正如在另一个答案中提到的那样,引用本质上是常量。

 int &ref = obj;

一旦你用一个对象初始化了一个引用,你就不能解除这个引用和它所引用的对象的绑定。引用就像别名一样工作。

当您声明 const 引用时,它只不过是引用 const 对象的引用。

 const int &ref = obj;

上面的声明语句如 constint 正在确定将由引用引用的对象的可用特征。为了更清楚,我想向您展示 pointer 相当于 const 参考;

 const int *const ptr = &obj;

所以上面的代码行在其工作方式上等同于 const 引用。 此外,还有最后一点我想提一下;

必须仅使用对象初始化引用

所以当你这样做时,你会得到一个错误;

 int  &r = 0; // Error: a nonconst reference cannot be initialized to a literal

这条规则有一个例外。如果引用被声明为 const,那么您也可以使用文字对其进行初始化;

 const int  &r = 0; // a valid approach

原文由 Ozan Yurtsever 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题