返回的常量引用究竟何时被销毁
When exactly does a returned const reference get destroyed?
假设我有一个通过常量引用返回整数的函数:
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
表达式的结束。
相关文章:
- 何时在引用或唯一指针上使用移动语义
- 何时提供默认参数作为模板参数
- C++-明确何时以及如何调用析构函数
- 传递给std::function template的template参数究竟代表什么
- 在以唯一ptr为值的C++映射中,动态内存何时会被销毁
- 何时应通过引用传递矢量参数而不是按值传递矢量参数?
- 如果非动态变量被指针引用,何时超出范围?
- 类作用域的类型别名"using":[何时]方法中的用法可以先于类型别名?
- 何时定义QT_NO_CONTEXTMENU?
- 何时为派生类初始化 vptr?
- C++关于指针和使用函数将它们启动到堆的行为究竟是什么?
- 如何知道何时调用删除以及何时调用 delete[] C++?
- 究竟如何工作范围?
- 指针的 C++ 动态数组 - 何时需要使用它?
- 我应该在 C++ 中何时/为什么使用 STATIC?
- 变量的值何时可以在C++中意外更改?
- 调用方如何知道 VARIANT 中何时有十进制?
- 何时应在构造函数参数中使用 const C++?
- 返回的常量引用究竟何时被销毁
- 用于初始化全局变量的函数究竟何时执行