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

时间:2014-12-27 01:36:06

标签: c++ c++11 libstdc++ libc++

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

  

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

假设这是真的,是否存在(历史或其他)libstdc ++使用逆序的原因?

奖励:是否有任何实现因任何原因改变了它的std :: tuple顺序?

1 个答案:

答案 0 :(得分:11)

请参阅this answer了解libc ++选择转发订单的原因。至于为什么libstdc ++选择了逆向顺序,这可能是因为它在变量模板提案中的表现方式,并且是更明显的实现。

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

<强>更新

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

  1. 可以实施。
  2. 实现具有良好的编译时性能。
  3. 它为libc ++的客户提供了直观和可控的东西,如果他们关心存储的顺序,并且在使用libc ++时愿意依赖它,尽管它没有被指定。
  4. 简而言之,libc ++ tuple的实现者只是觉得按照客户端(隐式)指定的顺序存储对象是件好事。