假设我有一个接受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 ++中是合法的?
答案 0 :(得分:15)
引用是const,而不是对象。它不会改变对象是可变的这一事实,但是你有一个名称可以通过它来修改它(j
),另一个名称(i
)你可以通过它来'吨。
对于const引用参数,这意味着main
可以修改对象(因为它使用了它的名称,j
),而func
无法修改对象只要它只使用它的名称i
即可。 func
可以原则上通过使用const_cast
创建另一个引用或指针来修改对象,但不要。
答案 1 :(得分:4)
const int &i = j;
这声明了对常量整数的引用。 使用此引用,您将无法更改它引用的整数的值。
您仍然可以使用原始变量名称j更改值,只是不使用常量引用i。