c++ - 如何延长访问器返回的右值引用的生命周期?

标签 c++ c++11 boost

与此问题相关:Return value or rvalue reference? - 我发现以下示例确实不安全,至少对于 g++ 6.1.0 和 Boost 1.60.0 是这样。

#include <boost/optional.hpp>

struct A {
    A();
    A(const A&);
    A(A&&);
    ~A();

    int* begin();
    int* end();

    int* buf;
};

boost::optional<A> f();

int test() {
    int res = 0;
    for (int n : f().value())
        res += n;
    return res;
}

当我查看生成的汇编代码时,我肯定看到 A::~A()A::begin() 之前被调用,A::end()

问题是:在 f() 返回的临时值消失之前,强制移动构造的侵入性最小的方法是什么?

最佳答案

创建显式临时文件:

for (int n : A(f().value())) { /* ... */ }

关于c++ - 如何延长访问器返回的右值引用的生命周期?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37199525/

相关文章:

c++ - OS X 10.7 上 MacPorts 的 Boost.Log 链接器错误

c++ - 中断任意等待操作

c++ - 从 boost 共享内存转储数据的最佳方法

c++ - 在 C++Builder 中重载 MainForm 构造函数

c++ - 编译器跳过 C++ 中的可变参数模板/函数

gcc - c++11 std::array of std::atomic 零初始化编译失败?

c++ - 在 C++ 中模拟来自 C# 的 ContainsKey (Key) - 什么是最佳实践?

c++ - doxygen 方程显示不正确

c++ - _REENTRANT 标志是什么?

c++ - STL 不从系统级别释放内存