C++ 从返回值实例化引用参数

C++ 从返回值实例化引用参数,c++,reference,arguments,return,C++,Reference,Arguments,Return,有一些功能 SomeType foo(){ SomeType temporaryVariable; // do something return temporaryVariable; } void bar(SomeType& arg){ // action } 为什么我需要显式复制返回值,然后将其作为参数传递给bar函数 auto copyOfReturnValue = foo(); bar(copyOfReturnValue); 什么阻止C++从以下构造? bar

有一些功能

SomeType foo(){
  SomeType temporaryVariable;
  // do something
  return temporaryVariable;
}

void bar(SomeType& arg){
  // action
}
为什么我需要显式复制返回值,然后将其作为参数传递给
bar
函数

auto copyOfReturnValue = foo();
bar(copyOfReturnValue);
<>什么阻止C++从以下构造?

bar(foo());

临时变量不绑定到对非常量的引用。您需要一个左值或通过引用const获取参数。无法将临时值传递到
bar
的原因是,如果允许,它会让您说出
bar(5)
,然后可能会更改函数内的对象。现在,把5改成别的东西是没有意义的,是吗?因此,语言规则规定临时词只能绑定到const的引用。因此,如果您编写
bar(const SomeType&arg)
,它将编译并工作。@jrok您应该添加注释作为答案。