c++ 我可以给一个非常数变量赋一个常量引用吗?

thtygnil  于 2023-01-03  发布在  其他
关注(0)|答案(1)|浏览(132)

假设我定义了以下操作符:

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.
fcwjkofz

fcwjkofz1#

是的,您可以将常量引用赋给非引用变量。

int x = 42;
 const int &y = x;  // y is a const reference to x
 int w = y; // this works
 int z& = y; // this doesn't

您可以将常量引用赋给非引用,因为值是复制的,这意味着如果修改wx不会被修改,因为w是数据的副本。
你不能将常量引用赋给非常量引用,因为当你使用常量引用时,你保证你不会修改指向的值。如果你被允许将常量引用赋给非常量引用,你将打破这个保证。

相关问题