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

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

根据 Link ,关于 std::tuple...

libstdc++ always places the members in reverse order, and libc++ always places the members in the order given

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

额外奖励:这两个实现是否曾因任何原因更改其 std::tuple 顺序?

最佳答案

参见 this answer为什么 libc++ 选择前向顺序。至于lib​​stdc++为什么选择逆序,大概是因为variadics template proposal中就是这么演示的,也是比较明显的实现方式。

奖励:没有。这些排序在两个库中都是稳定的。

更新

libc++ 选择前向存储顺序是因为:

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

简而言之,libc++ tuple 的实现者只是觉得按照客户端(隐式)指定的顺序存储对象是一件好事。

关于c++ - 为什么 libstdc++ 以相反的顺序存储 std::tuple 元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27663641/

相关文章:

c++ - 针对 musl 编译 libstdc++

c++ - 不必要清空移出的 std::string

gcc - cmake 检测哪个库 libc++ 或 libstdc++ 配置为用于 g++ 或 clang++

c++ - 如何正确使用模板类的嵌套类?

c++11 - c++11/14 是否支持类似 vector<auto> 的东西

c++ - Qt QSqlQuery bindValue 与 ?但不是 :placeholders

c++ - boost 和 c++11 线程兼容性

c++ - 为什么 std::future 模板参数类型是引用类型?

c++ - 是否有任何类型特征控制成员类型(不是成员变量)

C++ exc_bad_access 从 unordered_map 中指向的对象访问字符串字段