假设我定义了以下操作符:
const int & operator= (const MyClass &);
我能用它给一个非常数变量赋值吗?
通过阅读注解here,我的理解是,是的,我可以(即,我可以做像a=b
这样的事情,即使a不是const
,编译器也不会抱怨)。
但是,当我尝试以下代码时:
int main()
{
int x = 42;
const int &y = x; // y is a const reference to x
int &z = y;
}
它会失败,并出现以下情况:
compilation
execution
main.cpp:9:8: error: binding reference of type 'int' to value of type 'const int' drops 'const' qualifier
int &z = y;
^ ~
1 error generated.
1条答案
按热度按时间fcwjkofz1#
是的,您可以将常量引用赋给非引用变量。
您可以将常量引用赋给非引用,因为值是复制的,这意味着如果修改
w
,x
不会被修改,因为w
是数据的副本。你不能将常量引用赋给非常量引用,因为当你使用常量引用时,你保证你不会修改指向的值。如果你被允许将常量引用赋给非常量引用,你将打破这个保证。