C++ PRIMERPLUS chapter8

inline 内联函数 函数定义放在函数头那   用该函数副本替代该函数调用(原来是要跳到函数位置再跳回)   看是跳用时间长还是函数执行时间长 前者长用内联

C语言用内联可以用define 代替 但是 用表达式 如1+2 来做参数(文本替换) 可能引发问题  如 X*X  替换为1+2*1+2  而不是3*3

 

引用传递   

对原文的引用

int rats= 101

int & rodents = rats  引用    其中 rodents == *prats == rats     &rodents == prats == &rats

int * prats = &rats

引用必须要在声明的时候初始化

int & rodents = rats

int * const pr = &rats  //其中rodents和*pr相同

一个引用变量直接赋值一个变量 只是 改变值不是改变引用

传递参数 会有一个变量 两个名称 形成一个新的别名

引用参数类型不匹配时 将生成临时变量(C++要使用CONST否则要报错)

尽量使用const

右值引用 &&

引用结构和基本变量差不多 不希望改变原值可以用const

返回引用其实返回引用变量的别名 但是不要返回已经函数结束时不存在的内存引用(比如函数内部的引用)

 

accumulate(dup,five) = four  先把five给dup 然后用 four 覆盖dup内容(函数返回dup的引用,如不能赋值 则 const free_throws & accumulate(.......))

string提供char*到string的转换 意味着你可以用一个C的字符串来初始化string (如 字符串  "sdfgdfgdf"  空字符结尾的字符数组  和指向char的指针变量)

 

指针和引用的区别

★ 相同点:
1. 都是地址的概念;
指针指向一块内存,它的内容是所指内存的地址;引用是某块内存的别名。

★ 区别:
1. 指针是一个实体,而引用仅是个别名;
2. 引用使用时无需解引用(*),指针需要解引用;
3. 引用只能在定义时被初始化一次,之后不可变;指针可变;
4. 引用没有 const,指针有 const;
5. 引用不能为空,指针可以为空;
6. “sizeof 引用”得到的是所指向的变量(对象)的大小,而“sizeof 指针”得到的是指针本身(所指向的变量或对象的地址)的大小;
7. 指针和引用的自增(++)运算意义不一样;
8.从内存分配上看:程序为指针变量分配内存区域,而引用不需要分配内存区域

 

引用的两个原因 :1 程序员能修改调用的数据对象  2 提高运行速度而不是传递整个对象

 

传递原则

数据对象小 按值

较大的结构 用const指针或者引用

类对象 const引用

修改调用数据的函数 用指针 如fixit(&t)

数组 只能用指针

结构 指针或者引用

类对象 引用

 

 

默认值

 

某个参数为默认值 之后全是默认值void a(int a,int b =1 ,int c = 2)

调用 可以 a(1)  a(1,2)  a(1,2,3)  不能跳过参数 如a(1, ,3)

函数多态 和函数重载一个事情 能用多个同名函数 同名但是特征标要不同(返回值不同不影响 特征标必须要不同)

如 void a(int b,double b) void a(int a, char *str)

参数列表 又称函数特征标 

调用时候自动匹配特征进行调用(严格不进行转换)  

 

函数模板 一个算法用于不同类型的函数 使用模板

template <typename Anytype> typename可以用class替换

但是模板部分数据不支持 比如比较运算不支持结构 复制不支持数组等

 

显示具体化 template<> void Swap<job>(job &,job &)

 

完全匹配时候 非const 优先和非const 而且 非模板优先

若想强制调用模板函数 lesser<int>(x,y)   <int>可以省略  加了就代表强制转换成INT 

decltype(x+y) xpy  xpy的类型就是x+y的类型                                        

对于函数头  可以 auto h(int x ,float y) -> double   后置返回提供的类型

结合一下 auto h(int x ,float y) ->decltype (x+y)

posted @ 2019-01-13 20:00  Cyborg  阅读(163)  评论(0)    收藏  举报