Cas*_*sey 75 c++ tuples visual-studio-2010 stdtuple std-pair
a std::pair和std::tuple只有两个成员之间有区别吗?(除了明显std::pair需要两个,只有两个成员,tuple可能会少...)
Nic*_*las 75
有一些差异:
std::tuple永远不能通过标准布局(至少,它不是必须符合标准).每一个std::pair<T, Y>是标准的布局如果两个T和Y是标准布局.
获取a的内容pair比a 更容易tuple.你必须在tuple案例中使用函数调用,而paircase只是一个成员字段.
但那是关于它的.
Ste*_*Lin 26
这是一个非常晚的答案但请注意,因为std::pair使用成员变量定义,因此无法使用空基类优化来优化其大小(first并且second必须占用不同的地址,即使其中一个或两个都是空类).无论对齐要求如何都会加剧这种情况second_type,因此在最坏的情况下,结果std::pair将基本上是它所需的两倍.
std::tuple只允许通过辅助函数进行访问,因此如果一个或另一个为空,它可以从任一类型派生,从而节省开销.GCC的实现,至少,肯定是这样做的......你可以通过标题来验证这一点,但也有这个作为证据.
Ara*_*ion 24
一个std::tuple人的名字更长(一个额外的角色).用右手输入更多这些字符,大多数人都更容易打字.
也就是说,std::pair只能有两个值 - 不是零,一个,三个或更多.两个值.但是,元组对值的数量几乎没有语义限制.的std::pair,因此,这是一个更准确,类型安全的类型使用,如果你确实要指定一对值.
小智 19
请注意,在 C++ 17 中,可以使用相同的接口从具有两个元素的对和元组读取数据。
auto [a, b] = FunctionToReturnPairOrTuple();
Run Code Online (Sandbox Code Playgroud)
无需使用get<>:)