constexpr new如何分配内存?

问题描述 投票:0回答:2

我们如何在编译时动态分配?constexproperator new只是在堆栈上分配内存吗?

c++ new-operator constexpr c++20
2个回答
0
投票

它不分配全部。编译器在计算结果时会评估包含分配释放的函数的结果。

例如

constexpr int triangle_number(int n)
{
    std::vector<int> intermediate(n);
    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

0
投票

没有constexpr new运算符。

自C ++ 20起,在仅使用可替换分配全局函数的情况下,可以在new表达式中使用constexpr运算符(这意味着您不使用展示位置new或用户定义的分配函数),并在同一表达式中取消分配数据。

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

© www.soinside.com 2019 - 2024. All rights reserved.