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您应该添加注释作为答案。