Tac*_*chi 3 c++ new-operator constexpr c++20
我们如何在编译时动态分配?是否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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1071 次 |
| 最近记录: |