Constexpr with new operator

huangapple go评论68阅读模式
英文:

Constexpr with new operator

问题

我使用C++14,可以像这样使用`constexpr`吗:

```cpp
constexpr Myclass* obj = new Myclass()

我遇到了一些编译错误,也尝试过搜索,但所有示例都没有动态分配。


<details>
<summary>英文:</summary>

I use C++14, can I use `constexpr` like that:

constexpr Myclass* obj = new Myclass()


I get some compilation errors, also tried to google but all examples without dynamic allocation.


</details>


# 答案1
**得分**: 2

你不能在C++14中这样使用`constexpr`。在C++14中,不允许在常量表达式中评估`new`表达式。

在C++20中,有一定程度的支持,但仅当你在常量表达式结束之前正确释放分配的内存时才能使用。在你的示例中,预期的常量表达式是`obj`的初始化,它不包括分配的内存的释放。

<details>
<summary>英文:</summary>

&gt; I use C++14, can I use constexpr like that:

No you can&#39;t. Evaluation of a `new` expression in a constant expression is never allowed in C++14.

In C++20 it is to some degree, but _only_ if you dealloate the allocated memory properly _before the constant expression ends_. In your example the intended constant expression is the initialization of `obj` which does not include any deallocation of the allocated memory.

</details>



huangapple
  • 本文由 发表于 2023年8月4日 06:02:56
  • 转载请务必保留本文链接:https://go.coder-hub.com/76831839.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定