假设我想在 tuple
中存储三种类型: int
, float
和 std::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/