5

std::string_view::remove_prefix()并且std::string_view::remove_suffix()都是constexprc++17 中的成员函数;但是,它们会修改调用它们的变量。如果值是constexpr,它也将是const并且不能被修改,那么这些函数如何用于一个constexpr值呢?

换一种方式:

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

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

4

1 回答 1

8

标记它们的原因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);
于 2017-06-26T17:02:00.560 回答