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

c++ function: pass non const argument to const reference parameter

本文关键字:常量 参数传递 引用 参数 非常 函数 c++      更新时间:2023-10-16

假设我有一个函数,它接受常量引用参数传递,

int func(const int &i)
{
  /*    */
}
int main()
{
  int j = 1;
  func(j); // pass non const argument to const reference
  j=2; // reassign j
}

这段代码运行良好。根据C++入门,传递给这个函数的参数如下,

int j=1;
const int &i = j;

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

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

const int&i=j

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

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

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

const int &i = j;

这声明了对常量整数的引用。使用此引用,您将无法更改它引用的整数的值。

您仍然可以使用原始变量名称j来更改值,只是不使用常量引用i。