只有两个成员的anstd::pair
和an之间有区别std::tuple
吗?(除了显而易见的std::pair
要求,只有两个成员而且tuple
可能有更多或更少的成员。)
Answers:
有一些区别:
std::tuple
绝不可能通过标准的布局(至少,它不是必需的是由标准)。每一个std::pair<T, Y>
是标准的布局如果两个T
和Y
是标准布局。
获取a的内容pair
比获取a的内容要容易一些tuple
。您必须在tuple
案例中使用函数调用,而pair
案例只是一个成员字段。
就是这样。
std::map
用途std::pair<const Key,T>
为value_type
即使在C ++ 11。元组到底在哪里使用std::map
?
std::map
。
一个std::tuple
的名字较长(一个额外的字符)。这些字符中更多的是用右手键入的,因此对于大多数人来说更容易键入。
也就是说,std::pair
只能有两个值-不能为零,一,三个或更多。两个值。但是,元组对值的数量几乎没有语义上的限制。std::pair
因此,如果您实际上要指定一对值,则使用an是更准确的类型安全类型。
std::tuple<>
是同样类型安全的(它怎么会没有呢?),并2
没有比语义不同pair
。
[[no_unique_address]]
应该消除std::pair
的缺点。
.first
并且.second
很方便,但是如果在代码更改中需要第三(或更多)成员,它们将不提供任何帮助。我已经注意到,std::get
无论在任何Getter中,我都倾向于使用那种方式,我不需要更改所有内容,只需更改数据类型和任何make_pair
调用即可make_tuple
。