我可以在 C++ 中 return 跨度吗?如果是这样,如何? (对替代品持开放态度。)

Can I return a span in C++? If so, how? (Open to alternatives.)

我得到的作业项目指南明确禁止使用向量和字符串,但我需要从函数传递一个不确定大小的 char 数组。 span 的使用似乎 可能 是可行的,如果我能更好地理解它是如何使用的话。如果有人可以推荐 better/different 传递数组的方法(除了字符串和向量),我很想了解它。

我考虑过生成一个暂存文件并在其中存储输入文本,以便在程序的其他地方调用,但这似乎比在这种情况下所必需的要麻烦得多。这个程序也足够小,我可以在 main 中做所有事情,但这也不是必需的。

我想做的是能够调用这样的函数:

span<char> getSpan(){
    char arr[] = { 'A', 'B', 'C' };
    span<char> spanOut{ arr };
    return spanOut;
}

然后从 main:

打印 spanOut 的内容
int main() {
    // Some Code...
    printSpan = getSpan();
    std::cout << printSpan;
}

理想情况下,上述代码的结果将 ABC 打印到终端。

span 是非拥有视图。它类似于指针和引用。当getSpanreturns时,本地数组arr已经不存在了。 returned 跨度指向这个不存在的数组,访问它会导致未定义的行为。这类似于悬挂指针问题。

如果您确保在函数 returns:

之后存储仍然存在,您可以 return 一个 span
auto getSpan()
{
    static char arr[] = { 'A', 'B', 'C' }; // note: static
    return span(arr);
}

请注意,只要您 return 具有指针语义(即非拥有)的东西——迭代器、引用等,就会存在此问题

原来是Anonymous Anonymous was , the instructor wanted me to use dynamically allocated memory. I had been getting too "clever" for my own good, and missing the obvious in favor of complexity. Thank you, L.F., for your :)