假设我有一个接受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
redelcare一个非const变量到const变量?为什么在C++中此表达式合法?
请您参考如下方法:
引用是const,而不是对象。它不会改变对象可变的事实,但是您有一个对象名称(j
)可以通过它进行修改,而另一个名称(i
)则不能通过它进行修改。
对于const reference参数,这意味着main
可以修改对象(因为它使用对象的名称j
),而func
不能修改对象,只要它仅使用对象的名称i
即可。 func
原则上可以通过使用const_cast
创建另一个引用或指向该对象的指针来修改对象,但不能这样做。