编辑:现在godbolt(gcc,msvc)的初始化为非空时会出错。这里有一些混乱,因为我的msvc的初始化为空时出错,而godbolt没有(可能是因为我的msvc更新)。
#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):message:(sub-)object指向在常量计算期间堆分配的内存
编辑:初始化非空的gcc警告说明问题
错误:“std::vector(std::initializer_list{((const int*)(& const int [1]{1})),1},std::allocator())”不是常量表达式,因为它引用了“operator new”的结果195|return static_cast〈_Tp*〉(::operator new(__n));|~~~~~~~~~~~~~~~~~~~^~~~~
1条答案
按热度按时间ffscu2ro1#
std::vector
不应该有constexpr
说明符https://stackoverflow.com/a/69498591/11998382。我认为godbolt编译这个是错误的。(如果你从来没有分配过,那么没关系)
constexpr
函数可以在运行时求值,但是在这个函数的运行时版本中,std::vector
不能是constexpr
。