我可以在 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
是非拥有视图。它类似于指针和引用。当getSpan
returns时,本地数组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 :)
我得到的作业项目指南明确禁止使用向量和字符串,但我需要从函数传递一个不确定大小的 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
是非拥有视图。它类似于指针和引用。当getSpan
returns时,本地数组arr
已经不存在了。 returned 跨度指向这个不存在的数组,访问它会导致未定义的行为。这类似于悬挂指针问题。
如果您确保在函数 returns:
之后存储仍然存在,您可以 return 一个span
auto getSpan()
{
static char arr[] = { 'A', 'B', 'C' }; // note: static
return span(arr);
}
请注意,只要您 return 具有指针语义(即非拥有)的东西——迭代器、引用等,就会存在此问题
原来是Anonymous Anonymous was