gpt4 book ai didi

c++ - 为什么 C++17 destroy()/destroy_n() 函数向前运行(而不是向后运行)?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:15:32 30 4
gpt4 key购买 nike

在 C++17 中,destroy()destroy_n() 运行一系列对象的析构函数。

但是根据cppreference这是以前向方式完成的,即

template< class ForwardIt >
void destroy( ForwardIt first, ForwardIt last )
{
for (; first != last; ++first)
std::destroy_at(std::addressof(*first));
}

但是数组的销毁是reverse to the order of construction按照标准要求。

那么 destroy()destroy_n() 的用例是什么?

有没有和正常的数组销毁不一致的原因,或者这是cppreference的错误?

最佳答案

destroy()/destroy_n() 是一致的 - 但与标准算法一致。添加一个反向工作的算法会带来很多不必要的困惑。除此之外,您始终可以:

destroy(std::rbegin(array), std::rend(array));

它完全符合您的期望,同时保持其余算法的样式和类型要求。

关于标准的另一件事。它只说明 C 样式数组以这种方式工作。 vectormap 或任何其他 STL 容器都没有。由于 destroy 函数可以采用任何 C++ 范围,因此它的行为与典型的 C++ 代码相同,而不是很久以前继承的语法的一部分是合理的。

关于c++ - 为什么 C++17 destroy()/destroy_n() 函数向前运行(而不是向后运行)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50467447/

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