lun*_*nuy 0 c++ c++20 std-ranges
#include <iostream>
#include <numeric>
#include <ranges>
#include <vector>
#include <string>
#include <string_view>
int main() {
auto str = (
std::views::iota(1)
| std::ranges::views::take(5)
| std::ranges::views::transform([](int x) -> std::string_view {
return std::to_string(x) + "|";
})
| std::ranges::views::join
);
for (const char ch : str) {
std::cout << ch;
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我是 cpp 函数式编程的新手。我想生成前五个自然数并将它们转换为字符串,然后连接它们并打印它。
如果我使用std::stringlambda 的返回类型进行转换,它会在编译时引发许多错误。我想我应该把它改成std::string_view. 我这样改了,编译没有编译错误。但是,如果我std::string_view在那里使用,lambda 函数仅返回字符串的引用,并且当 lambda 结束时,堆栈内存上的翻译字符串将被从内存中删除。因此,该程序不会打印任何内容。
我该如何修复它?
如果我使用
std::stringlambda 的返回类型进行转换,它会在编译时引发许多错误。
您观察到的是 C++20 缺陷,已由P2328解决。如果您使用已经实现 P2328 的较新编译器版本(例如 gcc-11.2),您的代码将是格式良好的。
在P2328之前,我认为标准中没有简单的解决方案。