我可以创建constexpr
std :: array:
constexpr std::array<int,5> values {1,2,3,4,5};
工作正常。但是我无法创建constexpr
向量:
constexpr std::vector<int> vec = {1,2,3,4,5};
它给了我一个错误:
the type 'const std::vector<int>' of constexpr variable 'vec' is not literal constexpr std::vector<int> vec = {1,2,3,4,5};
答案 0 :(得分:20)
std::vector
使用动态内存分配。运算符new
无法在constexpr
方法中使用,因此std::vector
将永远不会constexpr
,因此无法为其声明constexpr构造函数。
std::array
不使用动态内存分配,它是在堆栈中分配的。它对创建constexpr对象的规则没有任何问题,可以是constexpr。
答案 1 :(得分:13)
std :: vector不是constexpr。有一个建议使std :: vector constexpr:https://github.com/ldionne/wg21/blob/master/generated/p1004r1.pdf
关于即将到来的C ++ 20/23更改,有完整的讨论:https://youtu.be/CRDNPwXDVp0?t=3080
因此,请再次使用C ++ 20。
答案 2 :(得分:9)
AFAIK initlializer_list
的{{1}}构造函数未声明为std::vector<>
。