表达式蓝本C++中std::tie表达式的促进作用就从原素提及中聚合三个tuple位元,其在子程序中表述,其表达式蓝本如下表所示:template< class… Types >std::tuple tie( Types&… args )noexcept;//C++11起, C++14前template< class… Types >constexprstd::tuple tie( Types&… args )noexcept;//C++14起当中模块 args 为内部结构 tuple 所制的零或更多右值模块。其codice为含右值提及的std::tuple第一类。促进作用和用语解包 tuple 和 pairstd::tie 能用作解包 tuple 和 pair,即使 std::tuple 保有从 pair 的切换表达式。注:位元tuple能将相同类别的原素存放在一同,能认知为pair的扩充(pair根本无法包涵三个原素,而tuple能数个)。std::tuple保有从 pair 的切换表达式的主要就其原因是:tuple的同时实现中空载了 operator=,其部份蓝本如下表所示:template< classU1, classU2>tuple& operator=( conststd::pair& p );//C++11起, C++20前因而,std::tie能用作pair的解包:std::set set;std::set::iterator iter;bool result;std::tie(iter, result)= set.insert(value);//解包 insert 的codice为 iter 与 resultstd::tie(std::ignore, result)= set.insert(value);//采用std::ignore忽视insert的回到pair中的第三个原素注:std::ignore 是令 std::tie 在解包 std::tuple 时做为不采用的模块的转义符采用,即忽视这类 tuple 中的这类codice。大批量表达式std::tie 能将数个表达式的提及资源整合成三个 tuple,进而透过除此之外三个同类别的 tuple 展开大批量表达式。tuple tup(“idoit”,98.8,1);string name;double score;int rank;//透过变量tup同时实现对name、score、rank的大批量表达式操作方式tie(name, score, rank)= tup;较为内部结构体能将内部结构体核心成员传至std::tie,进而同时实现内部结构体的较为。structS {int n;std::string s;float d;booloperator<(const S& rhs) const {//较为 n 与 rhs.n,//接着为 s 与 rhs.s,//接着为 d 与 rhs.dreturnstd::tie(n, s, d)< std::tie(rhs.n, rhs.s, rhs.d);//注:虽然tie回到的是三个 tuple,tuple的同时实现早已空载了operator<,因而能借助tuple的operator<,进而同时实现内部结构体S的operator<。}};具体内容实例#include#include#include#includeusingnamespacestd;structS {int n;string s;float d;booloperator<(const S& rhs) const {//较为 n 与 rhs.n,//接着为 s 与 rhs.s,//接着为 d 与 rhs.dreturn tie(n, s, d)< tie(rhs.n, rhs.s, rhs.d);}};intmain(){set setofs; S value1{42,”Test1″,3.14}; S value2{23,”Test2″,3.14};set::iterator iter;bool result;/************解包**********/ tie(iter, result)= setofs.insert(value1);if (result) cout <<“Value1 was inserted successfully\n”; tie(std::ignore, result)= setofs.insert( value2);//采用std::ignore忽视insert的回到pair中的第三个原素if (result) cout <<“Value2 was inserted successfully\n”;/***********内部结构体较为**********/bool r = value1< value2;cout <<“value1< value2: “<< r << endl;/***********大批量表达式**********/tuple tup(“idoit”,98.8,1);string name;double score;int rank; tie(name, score, rank)= tup;cout << name <<“”<< score <<“”<< rank << endl;return;}输出结果:Value1 was inserted successfullyValue2 was inserted successfullyvalue1< value2: 0idoit 98.81