我可以在C++中返回跨度吗?如果是这样,如何?(对替代方案开放
Can I return a span in C++? If so, how? (Open to alternatives.)
我得到的任务的项目指南特别禁止使用向量和字符串,但我需要从函数中传递一个大小不确定的字符数组。如果我能更好地理解它的使用方式,那么使用span似乎可以用于此目的。如果有人可以推荐一种更好/不同的传递数组的方法(除了字符串和向量(,我很想了解它。
我已经考虑过生成一个暂存文件并将输入文本存储在那里以供程序其他地方调用,但这似乎比在这种情况下应该需要的更麻烦。这个程序也足够小,我可以做所有事情,但这也不应该是必需的。
我想做的是能够调用这样的函数:
span<char> getSpan(){
char arr[] = { 'A', 'B', 'C' };
span<char> spanOut{ arr };
return spanOut;
}
然后从主打印 spanOut 的内容:
int main() {
// Some Code...
printSpan = getSpan();
std::cout << printSpan;
}
理想情况下,上述代码的结果是将ABC
打印到终端。
span
是一个非拥有视图。 它类似于指针和引用。 当getSpan
返回时,本地数组arr
不再存在。 返回的 span 指向这个不存在的数组,访问它会导致未定义的行为。 这类似于悬空指针问题。
如果确保在函数返回后存储仍然存在,则可以返回span
:
auto getSpan()
{
static char arr[] = { 'A', 'B', 'C' }; // note: static
return span(arr);
}
请注意,只要您返回具有指针语义(即非拥有(的内容(迭代器、引用等(,就会出现此问题。
事实证明,匿名匿名是正确的,讲师希望我使用动态分配的内存。为了我自己的利益,我变得太"聪明"了,错过了显而易见的东西,而倾向于复杂性。谢谢你,L.F.,你对跨度:)的出色细分
相关文章:
- visual c++,如何获取解决方案目录中的代码
- 如何巧妙地编写两个函数——一个用于检查是否存在解决方案,另一个用于获取所有解决方案
- 关于如何在具有单个参数的变体构造中选择替代方案?
- 如何在程序中实现单词跳过解决方案
- 如何检查文件是否复制成功?(便携式解决方案)C++
- 如何使用cmake从Visual Studio构建为ia32解决方案
- 如何在谷神星中为同一解决方案创建不同的求解器块?
- 如何在解决方案中生成多个项目之前执行流程
- 我可以在C++中返回跨度吗?如果是这样,如何?(对替代方案开放
- 如何针对以下方案进行复制?
- 如何将这种递归解决方案转换为分而治之?
- 如何在不创建新配置的情况下对两个不同解决方案使用的一个项目使用不同的 #defines
- 人们如何提出按位问题的解决方案?
- 如何使用 CMake 获得包含所有项目的 VS 解决方案和单个项目的解决方案
- 清.如何生成具有不同库类型的Visual Studo解决方案?
- 这个餐饮哲学家问题(dpp)的解决方案是如何工作的?互斥体和信号量
- 如何计算该程序的复杂性?是否有任何其他复杂性较低的解决方案
- 如果找不到解决方案,我如何留下递归循环,而不会打印任何东西
- 如何从Visual Studio解决方案中完全删除Google测试
- 如何提高主生成器 (SPOJ) 解决方案的效率