英文:
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>
> I use C++14, can I use constexpr like that:
No you can'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>
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论