这是一段简单的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()的返回对象是一个临时对象,不允许更改临时对象的值?
没有错误消息,我不确定编译器可能会抱怨什么,但我可以逻辑地解释原因:
在线:
bar(foo());
Run Code Online (Sandbox Code Playgroud)
foo()的返回值是临时A; 它是通过调用foo()创建的,然后在bar()返回后立即销毁.执行非const操作(即,改变临时A的操作)没有意义,因为对象A在之后被破坏.
再看一点,这是这个问题的虚拟副本:
这是一个很好的答案.