这个片段有什么问题?

Dea*_*ean -2 c++ c++11 stdarray c++14

我不知道这个片段有什么问题.我收到这个错误:

错误:成员函数'swap'不可行:'this'参数的类型为'const array',但函数未标记为const

#include <algorithm>
#include <memory>
#include <iostream>
#include <array>

struct MyClass {
  std::array<float, 4> arr;  
  float carr[4];

  std::array<float, 4> getArrElement() {
    std::array<float, sizeof(carr) / sizeof(float)> out;
    return out;
  }

  void fun() {
    auto vec = { getArrElement(), getArrElement(), getArrElement() };
    std::reverse(vec.begin(), vec.end()); // <-- error line here
  }


};

int main()
{
    MyClass obj;
    obj.fun();
}
Run Code Online (Sandbox Code Playgroud)

getArrElement没有返回一个const数组.auto应该推断,std::initializer_list但我也认为没有坏处.

怎么了?

Jon*_*ely 6

一个std::initializer_list只有常量迭代器,所以你不能改变它的元素.

一个initializer_list 不是一个容器,不能被视为一个容器.它是编译器已知的特殊hack语言支持类型,用于支持特定语法.不要试图将它用作通用容器或序列类型.

你可以做:

using elem_type = decltype(getArrElement());
std::vector<elem_type> vec = { getArrElement(), getArrElement(), getArrElement() };
std::reverse(vec.begin(), vec.end());
Run Code Online (Sandbox Code Playgroud)