不能创建constexpr std::vector
Cannot create constexpr std::vector
我可以创建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};
有一个建议,使std::vector
constexpr
: https://github.com/ldionne/wg21/blob/master/generated/p1004r1.pdf有一个关于即将到来的C++20/23
变化的完整讨论:https://youtu.be/CRDNPwXDVp0?t=3080所以再次检查C++20
!
[edit]: constexpr std::vector
已获批C++20
!https://www.reddit.com/r/cpp/comments/au0c4x/201902_kona_iso_c_committee_trip_report_c20/
[edit 2019-10]: gcc trunk(带--std=c++2a
标志)已经开始实现constexpr new
(constexpr vector
的先决条件)。参见:https://youtu.be/FRTmkDiW5MM?t=372
[edit 2021-11]: constexpr std::vector
和constexpr std::basic_string
现在在gcc 12
中实现 (https://en.cppreference.com/w/cpp/compiler_support)
对于至少在c++ 2a之前的c++版本:
std::vector
使用动态内存分配。操作符new
不能在constexpr
方法中使用,因此std::vector
永远不会是constexpr
,不能为它声明constexpr构造函数。std::array
不使用动态内存分配,它是在堆栈中分配的。它与创建constexpr对象的规则没有任何问题,并且可以是constexpr。
AFAIK std::vector<>
的initlializer_list
构造函数没有声明为constexpr
- 尝试使用 std::vector<std::thread时出现静态断言失败错误>
- 字符串化递归的"std::vector<std::vector<...>>"而不使用部分模板函数专用化
- 连接和压缩标准::vector<std::字符串的最佳方法>
- C++从 std::vector<std::function<中删除 std::function>>
- 如何在构造函数初始值设定项列表中使用 n 个元素初始化 std::vector<std::time_t>
- 如何使用 CUDA 将 std::vector<std::string> 复制到 GPU 设备
- 编译错误 std::vector<std::shared_ptr<T>>迭代器和擦除方法
- 将 std::vector<std::unique_ptr<T>> 移动到 std::vector<std::shared_ptr<T>>
- 如何从 boost::container::vector<std::string>::iterator 访问索引和对象?
- 使用 std::vector<std::future<int>> 和 std::async 启动几个线程时中止
- 为什么转置这个 std::vector<std::vector<std::string> > 这么慢?
- 是否有可能在没有复制的情况下传递 std::vector<int> 作为参数来获得 std::vector<std::array<int, 3>>?
- 在 boost::<double>asio::buffer 中使用像 std::vector<std::complex> 这样的参数
- 如何从 std::initializer_list<char const* 构建 std::vector<std::string>>
- 如何检查 std::vector<std::string> 的元素是否以某个子字符串开头?
- 在 std::vector<std::vector 中重新存储内部向量<TYPE>>
- 将 std::vector<std::string> 转换为 const char* const*
- 不能将结构push_back() 转换为 std::vector<std::shared_ptr<theStruct>> theVector
- SWIG:传递一个 std::vector< std::vector <double> >指向 python 的指针
- 将 std::vector<std::p air<const K, V>*> 转换为 std::vector<std::p air<const K, V>&g