C++ std::tie函數(shù)詳解

函數(shù)原型
C++中std::tie函數(shù)的作用就是從元素引用中生成一個tuple元組,其在頭文件<tuple>中定義,其函數(shù)原型如下:
template<?class...?Types?>
std::tuple<Types&...>?tie(?Types&...?args?)?noexcept;?//C++11起,?C++14前
template<?class...?Types?>
constexpr?std::tuple<Types&...>?tie(?Types&...?args?)?noexcept;//C++14起
其中參數(shù) args 為構(gòu)造 tuple 所用的零或更多左值參數(shù)。其返回值為含左值引用的std::tuple對象。
作用和用法
1. 解包 tuple 和 pair
std::tie 可以用于解包 tuple 和 pair,因為 std::tuple 擁有從 pair 的轉(zhuǎn)換賦值。
注:元組tuple可以將不同類型的元素存放在一起,可以理解為pair的擴展(pair只能包含兩個元素,而tuple可以多個)。
std::tuple擁有從 pair 的轉(zhuǎn)換賦值的主要原因就是:tuple的實現(xiàn)中重載了 operator=,其部分原型如下:
因此,std::tie可以用于pair的解包:
注:std::ignore 是令 std::tie 在解包 std::tuple 時作為不使用的參數(shù)的占位符使用,即忽略某些 tuple 中的某些返回值。
2. 批量賦值
std::tie 可以將多個變量的引用整合成一個 tuple,進而通過另外一個同類型的 tuple 進行批量賦值。
3. 比較結(jié)構(gòu)體
可以將結(jié)構(gòu)體成員傳入std::tie,從而實現(xiàn)結(jié)構(gòu)體的比較。
具體示例
輸出結(jié)果:
文章首發(fā)公眾號:iDoitnow如果喜歡話,可以關(guān)注一下
