c++ - std::tuple 参数中的类型顺序有什么影响吗?

标签 c++ c++11 tuples

假设我想在 tuple 中存储三种类型: int , floatstd::vector<double>

如果抛开后续接口(interface)不谈,就这样

tuple<int, float, vector<int>> t;

与此有任何区别

tuple<vector<int>, int, float> t;

由于 tuple 的实现作为可变参数基类,我希望生成的类有一个不同的布局,但是这有什么关系吗?在 tuple 中放置类型时,还需要考虑任何优化注意事项吗? (例如,把最大的放在第一位等)?

最佳答案

标准不对类型的实际布局施加任何限制。顺序唯一影响的是 std::get<N> 的结果, std::tuple_element<N, T>等等。

我知道 libstdc++ 和 Visual C++ 以与给定顺序相反的顺序排列类型; libc++ 按照给定的顺序列出类型。这实质上意味着没有可移植的方法来选择始终产生最佳布局的顺序。

不过,其他顺序也是可能的。允许实现 implement tuple with a layout that always produces minimal size但仍为 std::get<N> 保留相同的语义等等。不过,我不知道执行此操作的任何标准库实现。

关于c++ - std::tuple 参数中的类型顺序有什么影响吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23910161/

相关文章:

c# - 如何命名元组属性?

c++ - Linux Pybind11 'build check -j 4' 错误

c++ - std::function/bind 就像没有标准 C++ 库的类型删除

C++ 泛型插入标准容器?

c++ - 我可以防止对象被 std::memcpy 复制吗?

python - 在python中从配置文件中读取数组

scala - 当键是一个只有第一个元素已知的元组时,如何获取 scala Map 值?

c++ - 一个c++语法问题(一种结构方法)

c++ - 段错误 C++ Sundaram

c++ - 堆栈检查 C++ 中的 html 标签平衡