gpt4 book ai didi

c++ - 使用std::allocator在constexpr中进行默认初始化

转载 作者:行者123 更新时间:2023-12-02 10:30:19 27 4
gpt4 key购买 nike

首先,我使用裸constexpr / new实现了一个支持delete的伪容器。然后,我将其重构为使用std::allocator的所有优点。在执行此操作时,我发现无法实现constexpr uninitialized_default_construct ,因为您不能在new中使用放置constexpr,在C++ 20标准中也没有与constexpr等效的效果。
如果不对容器的实现进行重大更改以支持constexpr中的默认初始化,是否可以解决此问题?除了写论文来制作uninitialized_default_construct constexpr或介绍类似于 default_construct_at construct_at之类的东西外,还可以吗?

最佳答案

如果要在new中进行默认初始化,并且容器为固定大小,请使用裸constexpr。这意味着使用delete[]而不是std::allocator.deallocate后跟std::destroy。您仍然可以拆分分配和构造,但是要注意在构造完成之前初始化所有元素,以避免delete[]尝试破坏未初始化的内存中的对象。
对于非固定大小的容器,如问题中所述,需要std的支持。

关于c++ - 使用std::allocator在constexpr中进行默认初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62492702/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com