Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/154.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 从函数返回gsl::span_C++_C++14_Gsl - Fatal编程技术网

C++ 从函数返回gsl::span

C++ 从函数返回gsl::span,c++,c++14,gsl,C++,C++14,Gsl,我试图打印从函数返回的范围,但它没有捕获数据。如何正确地从函数返回范围 #include <gsl/span> #include <iostream> #include <memory> gsl::span<int> res(){ std::array<int, 3> str{100, 200,300}; gsl::span<int> a{str}; return gsl::span<int&

我试图打印从函数返回的范围,但它没有捕获数据。如何正确地从函数返回范围

#include <gsl/span>
#include <iostream>
#include <memory>

gsl::span<int> res(){
    std::array<int, 3> str{100, 200,300};
    gsl::span<int> a{str};
    return gsl::span<int>(a.data(), a.size());
}
int main() {
    auto test{res()};
    for (const auto &i: test)
        std::cout << i << std::endl;
}
#包括
#包括
#包括
gsl::span res(){
std::数组str{100200300};
gsl::span a{str};
返回gsl::span(a.data(),a.size());
}
int main(){
自动测试{res()};
用于(常数自动&输入:测试)

std::cout问题是
span
没有自己的值,所以返回悬空span


您必须返回
std::array
(按值)它拥有值。

只有当
span
引用的缓冲区保持有效时,才能访问
span
的内容。在这种情况下,它引用的对象超出了范围。因此,您应该直接返回
str
,或者使用
vector
,或者实际提供存储的东西。另一个选项是创建将数组放在某个地方,例如堆上,然后返回span。但是,您不应该忘记正确管理此内存,即注意何时删除数组。@Ruslan:
static str
将是另一种选择。分配以返回
span
是有问题的,因为我们预计不必进行反编译删除
span的内容span
。span实际上是一个视图,不应该与所有权相关。是的,我认为分配函数是某个类的一个方法,它将管理这个对象,而不是调用方将删除span的指针。是否可以通过引用参数传递span并通过该m返回值eans@tester123:不确定您的确切意思,但请记住,span是一个没有所有权的单一视图。