如何使用 span 来包装命令行参数

How to use span to wrap up command line args

即将推出的 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;
}

如果正确,我可以进一步使用 std::string_view 吗?

如果您使用 () 而不是 {},则不需要非常冗长的转换:

std::span(argv, argc)

这为您提供了 char const* 的范围。您可以使用 transform将它们 转换为 string_view。这有一些开销,因为你需要做一堆 strlens:

std::span(argv, argc)
    | std::views::transform([](char const* v){ return std::string_view(v); })

对于这样的东西,我有一个执行转换的函数对象,它很容易编写,所以这可能是:

std::span(argv, argc)
    | std::views::transform(static_cast_<std::string_view>)