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
?
答案 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);