返回的常量引用究竟何时被销毁

When exactly does a returned const reference get destroyed?

本文关键字:何时 究竟 常量 引用 返回      更新时间:2023-10-16

假设我有一个通过常量引用返回整数的函数:

const int& five()
{
    return 5;
}

我知道我不会通过引用(const或其他方式(返回一个值,该值的作用域仅在函数内部,但我只是好奇。

谁可以将函数返回用作这样的左值?

int sum = 4 + five();

在函数范围内创建的对象将在函数返回时销毁。 在控件返回到调用站点时,返回的引用不再有效。

这意味着您问题中的函数定义无效。 它返回对对象的引用,当任何内容有机会使用返回的引用时,该对象将消失。


值得注意的是,按值返回的临时对象一直存在到完整表达式的末尾。 因此,对于以下代码:

struct Test
{
    Test() { std::cout << "Test constructedn"; }
    ~Test() { std::cout << "Test destroyedn"; }
};
std::ostream& operator<<(std::ostream& os, const Test& t) {
    os << "Test output";
    return os;
}
Test func() {
    return {};
}
int main() {
    std::cout << func() << "nAftern";
}

输出将是:

Test constructed
Test output
After
Test destroyed

因为func返回的Test对象一直存在到完整cout表达式的结束。