只有两个成员的std :: pair和std :: tuple之间的区别?

在只有两个成员的std::pairstd::tuple之间有区别吗? (除了显而易见的std::pair需要两个,只有两个成员和tuple可能会less…)

有一些差异:

  1. std::tuple永远不能是标准布局 (至less,它不是必须的标准)。 如果TY都是标准布局,则每个std::pair<T, Y>都是标准布局。

  2. 获取一pair的内容比tuple容易一点。 您必须在tuple情况下使用函数调用,而pair情况只是一个成员字段。

但是这是关于它的。

这是一个非常晚的答案,但是请注意,因为std::pair是用成员variables定义的,所以它的大小不能用空基类优化来优化 ( firstsecond必须占据不同的地址,即使其中一个或两个都是空类) 。 这由于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将不起作用,但我认为这有利于结构。