【问题标题】:Getting the const reference of the local object获取本地对象的 const 引用
【发布时间】:2017-11-09 11:56:32
【问题描述】:

考虑一下:

std::vector<std::string> f() //some irrelevant function
{
    std::vector<std::string> tempCol;
...//some more irrelevant stuff
    return tempCol;
}

const std::vector<std::string>& refToLocal = f();

我知道它可以完美地编译和运行。我什至知道它在生产代码中被广泛使用。 那么问题来了,本地对象是不是一定要在函数作用域之后删除??引用如何“附加”到必须删除本地对象???

【问题讨论】:

  • 不是对本地值的引用,而是对函数返回的copy的引用。它返回一个值,而不是一个引用。
  • 是,但副本也必须删除
  • 这是对临时的引用。
  • 顺便说一句,如今通过返回值优化 (RVO) 将非引用函数调用结果分配给引用只是一个不必要的烦恼。您可以将结果分配给一个值变量(删除 &),而不会造成任何性能损失。

标签: c++ compiler-errors reference constants c++03


【解决方案1】:

tempCol(局部变量)在函数执行完毕后被销毁。该函数的返回值是tempCol副本

通常,返回值的生命周期结束于评估它出现的完整表达式的最后一步(在本例中为 ... = f();),但由于您将其绑定到引用(refToLocal),因此它的生命周期被延长到它所绑定的引用的生命周期。

当变量refToLocal超出范围时,它和函数返回值都被销毁并回收内存。

查看https://stackoverflow.com/a/17903361/2428220 以更详细地了解 C 和 C++ 中函数返回值的生命周期。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-13
    • 1970-01-01
    • 1970-01-01
    • 2019-08-02
    • 1970-01-01
    相关资源
    最近更新 更多