我不知道这个片段有什么问题.我收到这个错误:
错误:成员函数'swap'不可行:'this'参数的类型为'const array',但函数未标记为const
#include#include #include #include struct MyClass { std::array arr; float carr[4]; std::array getArrElement() { std::array 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(); }
getArrElement
没有返回一个const
数组.auto
应该推断,std::initializer_list
但我也认为没有坏处.
怎么了?
一个std::initializer_list
只有常量迭代器,所以你不能改变它的元素.
一个initializer_list
不是一个容器,不能被视为一个容器.它是编译器已知的特殊hack语言支持类型,用于支持特定语法.不要试图将它用作通用容器或序列类型.
你可以做:
using elem_type = decltype(getArrElement()); std::vectorvec = { getArrElement(), getArrElement(), getArrElement() }; std::reverse(vec.begin(), vec.end());