假设我有一个函数,它接受常量引用参数传递,
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。