constexpr作为可变成员

时间:2017-10-03 23:25:13

标签: c++ c++14

这是std :: basic_string_view

assignment运算符的定义

constexpr basic_string_view& operator=(const basic_string_view& view) noexcept = default;

是否有人能够向我解释为赋值运算符设置constexpr的目的是什么?

更普遍的问题是什么原因使可变成员constexpr?使用VS2015编译器我有一个警告,如

  

在C ++ 14' constexpr'不会暗示' const&#39 ;;考虑明确指定' const'

不应该是错误吗?

1 个答案:

答案 0 :(得分:3)

您可以在constexpr上下文中创建局部变量,并在C ++ 14中对其进行修改。

但是,如果赋值运算符不是constexpr,则无法使用它。

template<class T, std::size_t N>
constexpr std::array<T, N> sort( std::array<T, N> in ) {
  for (std::size_t i = 0; i < in.size(); ++i) {
    for (std::size_t j = i+1; j < in.size(); ++j) {
      if (in[i] > in[j]) {
        auto tmp = in[j];
        in[j] = in[i];
        in[i] = tmp;
      }
    }
  }
  return in;
}

live example