Nic*_*els 2 c++ string-view c++20 std-span
即将推出的 C++20 的这种使用是否std::span正确并且没有开销来包装命令行参数?
#include <iostream>
#include <span>
int main(int argc, const char* argv[])
{
for (auto s : std::span { argv, static_cast<std::size_t>(argc) })
std::cout << s << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
如果它是正确的,我可以进一步使用 withstd::string_view吗?
如果你使用()而不是{}你不需要真正冗长的强制转换:
std::span(argv, argc)
Run Code Online (Sandbox Code Playgroud)
这为您提供了一系列char const*. 您可以将它们转换string_view为使用transform. 这有一些开销,因为你需要做很多strlen事情:
std::span(argv, argc)
| std::views::transform([](char const* v){ return std::string_view(v); })
Run Code Online (Sandbox Code Playgroud)
对于这样的东西,我有一个执行转换的函数对象,这很容易编写,所以这可能是:
std::span(argv, argc)
| std::views::transform(static_cast_<std::string_view>)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1532 次 |
| 最近记录: |