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

Bat*_*u89 62 c++ const reference constants

一个相当理论的问题......为什么常量引用的行为与常量指针的行为不同,我实际上可以更改它们指向的对象?它们看起来像是另一个简单的变量声明.我为什么要用它们?这是我运行的一个简短示例,它编译并运行时没有错误:

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; 
}
Run Code Online (Sandbox Code Playgroud)

Bat*_*u89 80

最清楚的答案. "X&const x"有意义吗?

不,这是胡说八道

要找出上述声明的含义,请从右到左阅读:"x是对X的const引用".但这是多余的 - 引用始终是const,在某种意义上,您永远不能重新引用引用以使其引用不同的对象.决不.有或没有const.

换句话说,"X&const x"在功能上等同于"X&x".因为你在&之后添加const没有任何收获,你不应该添加它:它会让人迷惑 - const会让一些人认为X是const,好像你说过"const X&x".

  • `X&amp; const x` 格式错误,这是常见问题解答中的错误 (3认同)

mat*_*ort 50

该陈述icr=y;未提及参考y; 它将值赋给引用y的变量icr,i.

参考文献本身就是const,你无法改变他们所指的内容.有些" const引用"实际上是"引用const",即您无法更改它们引用的对象的值.他们被宣布const int&int const&不是int& const.

  • @Dasaru:是的,可以,但是对非常量的引用也可以视为对非常量的常量引用,因为引用本身始终是常量,与是否引用常量无关。 (2认同)

Alo*_*ave 25

什么是恒定的参考(不是恒定的引用)
一个恒定的参考实际上是参考一个常数.

常量引用/对常量的引用表示为:

int const &i = j; //or Alternatively
const int &i = j;
i = 1;            //Compilation Error
Run Code Online (Sandbox Code Playgroud)

它基本上意味着,您无法修改引用引用的类型对象的值.
例如:
尝试通过const引用修改1变量的值(赋值)将导致错误: ji

指定只读参考'i'


icr=y;          // Can change the object it is pointing to so it's not like a const pointer...
icr=99;
Run Code Online (Sandbox Code Playgroud)

不更改引用,它指定引用引用的类型的值.不能引用任何其他变量而不是它们在初始化时绑定的变量.

第一条语句指定的值yi
第二条语句指定的值99i

  • 等等,`const Type&`相当于`Type const&`? (3认同)

M.M*_*M.M 6

这段代码的格式不正确:

int&const icr=i;
Run Code Online (Sandbox Code Playgroud)

参考:C++17 [dcl.ref]/1:

Cv 限定引用的格式不正确,除非通过使用typedef-namedecltype-specifier引入 cv 限定符,在这种情况下,cv 限定符将被忽略。

该规则已存在于 C++ 的所有标准化版本中。因为代码格式不正确:

  • 你不应该使用它,并且
  • 没有相关的行为。

编译器应该拒绝该程序;如果没有,则可执行文件的行为完全未定义。

注意:不确定其他答案怎么没有提到这一点......没有人可以访问编译器?