c ++函数:将非const参数传递给const引用参数

fuy*_*uyi 7 c++ const pass-by-reference

假设我有一个接受const引用参数传递的函数,

int func(const int &i)
{
  /*    */
}

int main()
{
  int j = 1;
  func(j); // pass non const argument to const reference
  j=2; // reassign j
}
Run Code Online (Sandbox Code Playgroud)

这段代码工作正常.根据C++入门,这个函数传递给这个函数的内容如下,

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

其中i是j的同义词(别名),

我的问题是:如果我是j的同义词,并且我被定义为const,那么代码是:

const int&i = j

将const const变量重新定义为const变量?为什么这个表达式在c ++中是合法的?

Ste*_*sop 16

引用是const,而不是对象.它不会改变对象是可变的这一事实,但是你有一个名称j可以通过它来修改它,而i你可以通过另一个名称()通过它来修改它.

在const引用参数的情况下,这意味着main可以修改对象(因为它使用它的名称j),而func不能修改对象,只要它只使用它的名称,i.原则上func 可以通过创建另一个引用或指针来修改对象const_cast,但不要.