c++重载解析的三个步骤
第一步:记属性,找候选(1)按照名字相同原则,确定候选函数。(2)确定实参表的属性第二步:比参数,选可行根据实参的属性(个数和类型)与候选函数集中函数进行比较,如果个数一致(或多)、类型兼容,那么选为可行函数。第三步:划级别,定最佳[@more@]
effective STL学习笔记(1)
容器使用对象的方法[@more@]条款3:使容器里对象的拷贝操作轻量而正确1. STL的工作方式:拷进去,拷出来当你从容器中获取一个对象时,你所得到的对象不是容器里的那个对象。取而代之的是,当你向容器中添加一个对象(比如通过insert或push_back等),进入容器的是你指定的对象的拷贝2. 容器中直接放入对象的问题(1) (顺序容器)存在大量的数据移动,效率低(2) 如果存在继承,则拷贝会导致分割3. 解决方法建立指针的容器而不是对象的容器4. STL设计STL进行了大量拷贝,但它通常设计为避免不必要的对象拷贝(与数组相比较)。如果声明一个
c++primer学习笔记(3)
函数对象实现和迭代器[@more@]12.3.6 实现函数对象自定义函数对象的三种形式:1. 函数对象类定义的最简单形式包含一个被重载的函数调用操作符。2. 引入一个数据成员来存储被比较的值以及一个构造函数,把这个成员初始化为用户指定的值。3. 不使用构造函数它根据被比较的值对类参数化。12.4 回顾iteratorconst 容器只能被绑定在const iterator 上,这样的要求与const 指针只能指向const 数组的行为一样。12.4.1 插入iterator标准库定义一组三个插入iterator 的适配器函数,它们返回特定的插入iterator:(1)back_inserter() 它使用容器的p
c++primer学习笔记(2)
泛型算法[@more@]第十二章 泛型算法12.1 概述1.范型算法与被应用的容器类型以及被查找的值的类型无关算法的要求如下:(1) 我们需要某种遍历集合的方式这包括向前移到下一个元素以及识别下一元素是否是末元素的概念泛型算法用iterator 抽象来解决这个问题。对容器的遍历iterator 提供了对指针的一个泛化,它至少支持下列操作符:递增操作符以用来访问下一个元素、解引用操作符用来访问实际的元素、以及等于和不等于操作符用来判定两个iterator 是否相等。(2)我们需要能够对容器中的元素与被查找元素进行比较为每个算法提供两个版本:一个
c++primer学习笔记(1)
函数模板[@more@]第十章 函数模板10.1 函数模板定义1. (与宏做比较)函数模板提供了一种机制通过它我们可以保留函数定义和函数调用的语义在一个程序位置上封装了一段代码确保在函数调用之前实参只被计算一次而无需像宏方案那样绕过C++的强类型检查;2. (实质)函数模板提供一个种用来自动生成各种类型函数实例的算法;3. (形式)程序员对于函数接口参数和返回类型中的全部或者部分类型进行参数化而函数体保持不变;4. (场合)如果用一个函数的实现在一组实例上保持不变并且每个实例都处理一种惟一的数据类型,那么该函数就是模板的最佳候选