返回的 const 引用究竟何时被销毁?

When exactly does a returned const reference get destroyed?

假设我有一个函数return通过常量引用计算一个整数:

const int& five()
{
    return 5;
}

我知道我不应该 return 引用值(const 或其他)哪个作用域仅在函数内部,但我只是好奇。

是否可以像这样将函数return用作左值?

int sum = 4 + five();

在函数范围内创建的对象在该函数 returns 时被销毁。返回的引用在时间控制returns到调用站点时不再有效。

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


值得一提的是,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

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