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

时间:2012-02-03 10:30:36

标签: 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
}

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

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

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

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

const int& i = j

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

2 个答案:

答案 0 :(得分:15)

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

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

答案 1 :(得分:4)

const int &i = j;

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

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