只有两个成员的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。