这是一个已知的特殊情况,如果将常量引用分配为常量引用,则返回值不会丢失:
int MyFunction()
{
int x = 5;
return x;
}
int main()
{
const int& y = MyFunction();
std::cout << "This is valid: " << std::endl;
return 0;
}
现在,如果我有两个函数,如下所示:
int MyFunction()
{
int x = 5;
return x;
}
void MyOtherFunction(const int& val)
{
std::cout << val << std::endl;
}
int main()
{
MyOtherFunction(MyFunction());
}
根据标准,这是否有效?传递const引用有什么限制?
答案 0 :(得分:3)
是强>
[C++14: 12.2/5]:
[..] 函数调用(5.2.2)中与引用参数的临时绑定一直持续到完整表达式包含电话。 [..]
答案 1 :(得分:1)
那也没关系:标准要求匿名临时(MyFunction()
)可以绑定到const引用。
(它不能绑定到非const引用;有些编译器会失效)。
答案 2 :(得分:-1)
它有效。 。 引用只是变量的别名,它表示变量存储的地址位置。
const引用意味着你不能在你的函数中修改你的const争论。
在你的情况下, MyOtherFunction(MyFunction的());
这里MyFunctions返回一个int,它存储为匿名变量,其生命周期达到该表达式。