为什么libstdc ++以相反的顺序存储std :: tuple元素?

Ixr*_*rec 7 c++ libstdc++ c++11 libc++

根据http://flamingdangerzone.com/cxx11/2012/07/06/optimal-tuple-i.html,关于std :: tuple ...

libstdc ++总是以相反的顺序放置成员,而libc ++总是按给定的顺序放置成员

假设这是真的,有没有理由(历史或其他)为什么libstdc ++使用逆序?

额外奖励:是否有任何实现因任何原因改变了其std :: tuple排序?

How*_*ant 11

请参阅此答案,了解为什么libc ++选择了正向订单.至于为什么libstdc ++选择了反向顺序,这可能是因为它是如何在变量模板提议中演示的,并且是更明显的实现.

奖励:不.这两个图书馆的订单都很稳定.

更新

libc ++选择了转发存储顺序,因为:

  1. 它是可实现的.
  2. 该实现具有良好的编译时性能.
  3. 它为libc ++的客户提供了直观和可控的东西,如果他们关心存储的顺序,并且在使用libc ++时愿意依赖它,尽管它没有被指定.

简而言之,libc ++的实现者tuple只是觉得按客户端(隐式)指定的顺序存储对象是要做的质量事情.