如何在编译时动态分配内存?constexpr
operator new
只是在堆栈上分配内存吗?
如何在编译时动态分配内存?constexpr
operator new
只是在堆栈上分配内存吗?
没有constexpr new
运算符。
自C++20以来,您可以在只使用可替换的全局分配函数(这意味着您不使用放置new
或用户定义的分配函数)并且在同一表达式中解除分配数据的条件下,在constexpr
表达式中使用new
运算符。
因此,在您的最终程序中,这不会分配内存,因为您最终仅得到constexpr
表达式的最终结果。
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
constexpr operator new
”是什么意思? - 463035818_is_not_a_numberconstexpr
上下文中使用new
运算符)的含义。被接受的答案澄清了一切。 - Tachi