无法创建constexpr std :: vector

时间:2015-10-20 16:26:20

标签: c++ c++11

我可以创建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};

3 个答案:

答案 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<>