如何在 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);
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);