让我们说我有一个通过常量引用返回整数的函数:
const int& five()
{
return 5;
}
我知道我不应该通过引用(const
或其他方式)返回一个值,该范围仅在函数内部,但是我很好奇。
是否可以将函数return用作这样的左值?
int sum = 4 + five();
答案 0 :(得分:2)
当函数返回时,在函数范围内创建的对象将被销毁。当控件返回到呼叫站点时,返回的引用不再有效。
这意味着您问题中的函数定义无效。它返回对对象的引用,当任何东西都有机会使用返回的引用时,该对象将消失。
值得一提的是,由 value 返回的临时对象一直存在到整个表达式的结尾。因此,对于以下代码:
struct Test
{
Test() { std::cout << "Test constructed\n"; }
~Test() { std::cout << "Test destroyed\n"; }
};
std::ostream& operator<<(std::ostream& os, const Test& t) {
os << "Test output";
return os;
}
Test func() {
return {};
}
int main() {
std::cout << func() << "\nAfter\n";
}
输出为:
Test constructed Test output After Test destroyed
由于Test
返回的func
对象一直存在到整个cout
表达式的末尾。