std::vector 上的 constexpr 说明符不起作用



编辑:这现在在非空初始化的godbolt(gcc,msvc)上出错。出现了一些混乱,因为我的msvc在godbolt没有初始化的情况下出现了空初始化错误(可能是因为我的ms vc更新)。

#include <vector>
constexpr std::size_t f() {
constexpr std::vector<int> v{ 1 };
return 1;
}
int main() {
constexpr auto a = f();
}

/std:c++latest

ConsoleApplication9.cpp(12,24):错误C2131:表达式未计算为常量ConsoleApplication9.cpp(12,24):消息:(sub-)对象指向在常量评估期间堆分配的内存

编辑:带有非空初始化的gcc警告解释了问题

错误:"std::vector(std::initializer_list{((const int*)(&const int[1]{1})),1},std::allocater()"不是常量表达式,因为它引用了"operator new"的结果195|返回static_cast&lt_Tp*>(::运算符new(__n));|~~~~~~

std::vector不应该有constexpr说明符https://stackoverflow.com/a/69498591/11998382.的以下工作

constexpr std::size_t f() {
std::vector<int> aaa{};
return 1;
}

我认为godbolt编译这个是错误的(如果你从不分配,那没关系)constexpr函数可以在运行时求值,但在这个函数的运行时版本中,std::vector不能是constexpr

最新更新