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

时间:2017-06-26 16:48:17

标签: c++ c++17 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

1 个答案:

答案 0 :(得分:7)

他们被标记为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);