如何在 constexpr string_view 上使用 std::string_view::remove_prefix()

How to use std::string_view::remove_prefix() on a constexpr string_view

std::string_view::remove_prefix()std::string_view::remove_suffix()都是c++17中的constexpr成员函数;但是,它们会修改调用它们的变量。如果值是constexpr,它也会是const,不能修改,那么这些函数怎么用在constexpr值上呢?

换句话说:

constexpr std::string_view a = "asdf";
a.remove_prefix(2); // compile error- a is const

如何在 constexpr std::string_view 上使用这些功能?如果它们不能在 constexpr std::string_view 上使用,为什么函数本身标记为 constexpr

它们被标记为 constexpr 的原因是您可以在 constexpr 函数中使用它们,例如:

constexpr std::string_view remove_prefix(std::string_view s) {
    s.remove_prefix(2);
    return s;
}

constexpr std::string_view b = remove_prefix("asdf"sv);

如果 remove_prefix() 不是 constexpr,这将是一个错误。


也就是说,我会写:

constexpr std::string_view a = "asdf"sv.substr(2);