1

对即将到来的 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;
}

如果它是正确的,我可以进一步使用 withstd::string_view吗?

4

1 回答 1

4

如果您使用()而不是{}您不需要真正冗长的演员表:

std::span(argv, argc)

这为您提供了char const*. 您可以它们转换为string_view使用transform. 这有一些开销,因为你需要做一堆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>)
于 2020-06-05T15:32:52.653 回答