只有两个成员的std :: pair和std :: tuple之间的区别?
在只有两个成员的std::pair
和std::tuple
之间有区别吗? (除了显而易见的std::pair
需要两个,只有两个成员和tuple
可能会less…)
有一些差异:
-
std::tuple
永远不能是标准布局 (至less,它不是必须的标准)。 如果T
和Y
都是标准布局,则每个std::pair<T, Y>
都是标准布局。 -
获取一
pair
的内容比tuple
容易一点。 您必须在tuple
情况下使用函数调用,而pair
情况只是一个成员字段。
但是这是关于它的。
这是一个非常晚的答案,但是请注意,因为std::pair
是用成员variables定义的,所以它的大小不能用空基类优化来优化 ( first
和second
必须占据不同的地址,即使其中一个或两个都是空类) 。 这由于second_type
的任何alignment要求而加剧,所以在最坏的情况下,由此产生的std::pair
将基本上是它需要的大小的两倍。
std::tuple
只允许通过helper函数进行访问,所以如果其中一个是空的,它可以从任何一个types派生出来,节省开销。 海湾合作委员会的实施,至less,肯定是这样的…你可以通过标题戳,以validation这一点,但也有这个证据。
std::tuple
的名字更长(一个额外的字符)。 更多的这些字符用右手打字,这样对大多数人来说更容易input。
也就是说, std::pair
只能有两个值 – 不是零,一个,三个或更多。 两个值。 然而,一个元组在数值上几乎没有语义上的限制。 因此, std::pair
是一个更准确的types安全types,如果您确实需要指定一对值。
对于它的价值,我发现std :: tuple的GDB输出要难于阅读。 显然,如果你需要超过2个值,那么std :: pair将不起作用,但我认为这有利于结构。