小编Gab*_*e B的帖子

通过非常量引用参数修改常量引用参数

考虑以下代码:

#include <iostream>

void f(int const& a, int& b)
{
  b = a+1;
}

int main() {
  int c=2;
  f(c,c);
  std::cout << c << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
  • 函数f采用两个引用参数:int const& aint& b。因此,f不应该修改a,但它可以修改b,并且确实可以。
  • 但是,在 中main,我传递了相同的变量,同时引用bya和 by b。作为f修改b,它也修改a,它应该不应该

此代码在没有任何警告的情况下编译并打印3。如果我们单独跟踪每个变量,它看起来像常量-正确性推崇:c是非const,因此它是完全没有把它作为一个const参考的a,也可作为一个非const REF为b,和体内f我们modify b,这是非常量,而不是 touching …

c++ const-correctness pass-by-reference pass-by-const-reference

34
推荐指数
2
解决办法
1625
查看次数