c++ - 为什么 C++17 destroy()/destroy_n() 函数向前(而不是向后)运行?
问题描述
在 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));
}
但是数组的销毁与标准要求的构造顺序相反。
那么destroy()
and的用例是destroy_n()
什么?
是否有与正常数组破坏不一致的原因,或者这是 cppreference 中的错误?
解决方案
destroy()
/是一致的destroy_n()
- 但与标准算法。添加一个向后工作的算法会带来很多不必要的混乱。除此之外,您始终可以执行以下操作:
destroy(std::rbegin(array), std::rend(array));
它完全符合您的要求和期望,同时保持其余算法的样式和类型要求。
关于标准的另一件事。它仅说明 C 样式数组以这种方式工作。没有任何关于vector
,map
或任何其他 stl 容器的内容。由于destroy
函数可以采用任何 C++ 范围,因此它的行为类似于典型的 C++ 代码是合理的,而不是作为很久以前继承的语法的一部分。
推荐阅读
- java - 应用程序在发布后无法运行“此应用程序未针对此设备进行优化”但在模拟器中运行良好
- r - 有什么方法可以将两个不同的函数组合成 R 中的一个函数?
- ios - 如何在 Alamofire 中上传文件并在参数中传递数据 - swift 5
- javascript - 将 Sails JS 响应声明为类
- python - 折叠 spyder 中的代码块 - 有时有效,但有时无效
- python - python更新中的SQLite3,其中有多个可能的匹配项
- c# - WindowsForms 应用程序 - keyEvent 不起作用,问题出在哪里?
- postscript - index 方法在 postscript 中的作用是什么?
- angular - GET查询中的角度发送对象数组(多维数组)
- appkit - 如何以编程方式使用`NSControl.ControlSize.mini`制作`NSPopUpButton`?