C++17结构化绑定的实现.pdf

  1. 1、本文档共7页,可阅读全部内容。
  2. 2、本文档内容版权归属内容提供方,所产生的收益全部归内容提供方所有。如果您对本文有版权争议,可选择认领,认领后既往收益都归您。
  3. 3、本文档由用户上传,本站不保证质量和数量令人满意,可能有诸多瑕疵,付费之前,请仔细先通过免费阅读内容等途径辨别内容交易风险。如存在严重挂羊头卖狗肉之情形,可联系本站下载客服投诉处理。
  4. 文档侵权举报电话:400-050-0739(电话支持时间:9:00-19:00)。
C++17结结构构化化绑绑定定的的实实现现 动动机机 std ::map<K, V >的insert方法返回std ::pair<iterator, bool>,两个元素分别是指向所插入键值对的迭 器与指示是否新插入元素 的布尔值,而std ::map<K, V >::iterator解引用又得到键值对std ::pair<const K, V >。在一个涉及std ::map的算法中,有可能出现 大量的first和second ,让人不知所措。 #include <iostream> #include <map> int main() { typedef std::map<int, int> Map; Map map; std::pair<Map::iterator, bool> result = map.insert(Map::value type(1, 2)); if (result.second) std::cout << "inserted successfully" << std::endl; for (Map::iterator iter = map.begin(); iter != map.end(); ++iter) std::cout << "[" << iter->first << ", " << iter->second << "]" << std::endl; } C++11标准库添加了std ::tie,用若干引用构造出一个std ::tuple,对它赋以std ::tuple对象可以给其中的引用一一赋值 (二元std :: tuple可以由std ::pair构造或赋值)。std ::ignore是一个占位符,所在位置的赋值被忽略。 #include <iostream> #include <map> #include <utility> int main() { std::map<int, int> map; bool inserted; std::tie(std::ignore, inserted) = map.insert({1, 2}); if (inserted) std::cout << "inserted successfully" << std::endl; for (auto&& kv : map) std::cout << "[" << kv.first << ", " << kv.second << "]" << std::endl; } 但是这种方法仍远不完美,因为: 变量必须事先单独声明,其类型都需显式表示,无法自动推导; 对于默认构造函数执行零初始化的类型,零初始化的过程是多余的; 也许根本没有可用的默认构造函数,如std ::ofstream 。 为此,C++17引入了结构化绑定 (structured binding )。 #include <iostream> #include <map> int main() { std::map<int, int> map; auto&& [iter, inserted] = map.insert({1, 2}); if (inserted) std::cout << "inserted successfully" << std::endl; for (auto&& [key, value] : map) std::cout << "[" << key << ", " << value << "]" << std::endl; } 结构化绑定这一语言特性在提议的阶段曾被称为分解声明 (decomposition declaration),后来又被改回结构化绑定。这个名字 想强调的是,结构化绑定的意义重在绑定而非声明。 语语法法 结构化

文档评论(0)

sfdg4
这是本人近期收集的一些关于计算机的文档,相信程序员朋友特别熟悉,而且上传的时候也是根据语言上传的,全是一些实用的技巧。

相关文档

相关课程推荐