为什么要编写SegV程序? (为什么transformd_range运算符[]返回对iterator_facade产生的临时值的引用)?

我有一个简单的boost转换范围,该函数通过引用返回。但是iterator_facade的use_operator_brackets_proxy返回false,因此它尝试返回对临时对象的引用;

查看此螺栓的链接 https://godbolt.org/z/yN_vuS

已隔离。

如果输入向量不是const,则正确打印结果。 https://godbolt.org/z/3uAHb-

#include <iostream>
#include <boost/range/adaptor/transformed.hpp>
#include <string>
#include <vector>

template<typename T>
void print(T&& r ){
    std::cout << r[1];
}

int main(){
    const std::vector<double> input{0.0,1.0,2.0,3.0,4.0};
    const std::vector<int> indices = {0,2,4};

    auto indexing = [](auto&& seq){
        return [&seq](const auto idx) -> decltype(auto){
            return seq[idx];
        };
    };

    using boost::adaptors::transformed;

    print(indices | transformed(indexing(input)));
}
clOUdland619 回答:为什么要编写SegV程序? (为什么transformd_range运算符[]返回对iterator_facade产生的临时值的引用)?

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3157548.html

大家都在问