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

r7knjye2  于 2023-04-08  发布在  其他
关注(0)|答案(1)|浏览(146)

编辑:现在godbolt(gccmsvc)的初始化为非空时会出错。这里有一些混乱,因为我的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));|~~~~~~~~~~~~~~~~~~~^~~~~

ffscu2ro

ffscu2ro1#

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

相关问题