constexpr new 如何分配内存?

Tac*_*chi 3 c++ new-operator constexpr c++20

我们如何在编译时动态分配?是否constexpr operator new只是在栈上分配内存?

Nic*_*art 9

没有constexpr new运营商。

从 C++20 开始,您可以newconstexpr表达式中使用运算符,前提是您只使用可替换的全局分配函数(这意味着您不使用放置new或用户定义的分配函数)并且您在一样的表达。

因此,在您的最终程序中,这不会分配内存,因为您最终得到的只是constexpr表达式的最终结果。


Cal*_*eth 5

它不分配在所有。编译器在计算结果时评估一个函数的结果,该函数包括分配解除分配。

例如

constexpr int triangle_number(int n)
{
    std::vector<int> intermediate(n + 1);
    std::iota(intermediate.begin(), intermediate.end(), 0);
    return std::accumulate(intermediate.begin(), intermediate.end(), 0);
}

std::array<int, triangle_number(5)> arr; // compiler somehow produces 15
Run Code Online (Sandbox Code Playgroud)