引用和const引用之间的区别作为函数参数?

wei*_*wei 6 c++ reference

这是一段简单的C++代码片段:

A foo(){
  A a; // create a local A object
  return a;
}

void bar(const A & a_r){

}

bar(foo());
Run Code Online (Sandbox Code Playgroud)

为什么函数栏的参数必须是const引用,而不仅仅是引用?

Edit1:我知道引用是为了避免复制开销.和const是只读的.但是在这里我必须使它成为const引用,否则如果我删除"const",g ++将向我抛出一个错误.

Edit2:我的猜测是foo()的返回对象是一个临时对象,不允许更改临时对象的值?

gdu*_*bar 6

没有错误消息,我不确定编译器可能会抱怨什么,但我可以逻辑地解释原因:

在线:

bar(foo()); 
Run Code Online (Sandbox Code Playgroud)

foo()的返回值是临时A; 它是通过调用foo()创建的,然后在bar()返回后立即销毁.执行非const操作(即,改变临时A的操作)没有意义,因为对象A在之后被破坏.

再看一点,这是这个问题的虚拟副本:

为什么非const引用不能绑定到临时对象?

这是一个很好的答案.