1、C++的返回值不能是数组,可以是其他任何类型,但是可以将数组作为结构或对象组成部分来返回
2、原型描述函数到编译器的接口 C++中原型是必不可少的
3、C++禁止将const变量的地址赋给非const的指针 将非const变量的地址赋给const的指针是允许的
4、内联函数是C++为了提高程序运行速度做出的改进,与普通函数的区别在于编译器如何将其组合到程序中 使用方法:在函数的定义或者声明前加上inline关键字
内联函数不能递归,通常声明内联函数的做法是将整个定义放在本应提供原型的地方
如果函数的定义占用多行(函数过于复杂)就不适合作为内联函数
内联函数用空间换时间,来节省函数跳转的时间
内联函数相当于是C的宏的加强版,而且要求更少,如果遇到需要用宏的操作可以考虑转换为内联函数
5、引用变量 是已定义的变量的别名
引用变量的主要用途是作为函数的形参,这样函数将使用原始数据而不是其副本
引用和指针的区别:不能先声明后赋值,必须在声明引用时将其初始化,更像是const指针
按引用传递类似于按指针传递
当数据比较大(结构和类)时,引用参数和有用
6、临时变量,如果引用参数是const,如果:实参的类型正确但不是左值或者实参类型不正确但可以转换为正确的类型会生成临时变量
7、右值引用,使用&&
8、返回引用,直接把要返回的复制给接收返回值的变量,不需要生成临时变量,效率更高
要避免返回函数终止时不存在的内存单元的引用,比如函数中定义的临时变量
9、能够将特性从一个类传递给另一个类的语言特性:继承
10、默认参数,省略实参时自动使用一个值,注意:有默认参数的要放右边,同时实参要按从左到右的顺序依次赋给相应的形参,不能跳过任何参数
11、函数重载允许返回值不同,但同时特征标(形参)也必须不同
12、函数模板 template <typename AnyType> 或者是 template <class AnyType>
使用AnyType这个类型作为参数,使用函数时会用特定的类型替代AnyType
如果需要同一种算法作用于不同类型的函数可以使用模板
注意:函数模板并不能缩短可执行程序,最终的代码不包含任何模板,只包含了为程序生成的实际函数
使用模板的好处是使生成多个函数更简单、更可靠
13、对于给定的函数名,可以有非模板函数、模板函数和显式具体化模板函数及其它们的重载版本
14、显式具体化的原型和定义应以template<>打头,并通过名称来指出类型
具体化优先于常规模板,而非模板函数优先于具体化和常规模板
具体化例:template <> void Swap <int> (int &,int &)
template <> void Swap (int &,int &)
15、重载解析,编译器来选择使用哪个函数版本
大致步骤:1、创建候选函数列表
2、使用候选函数列表创建可行函数列表
3、确定是否有最佳函数
参数匹配从最佳到最差的顺序:1、完全匹配,但常规函数优于模板
2、提升匹配
3、标准匹配
4、用户定义的转换
如果有多个匹配的原型,会报错 ambiguous(二义性 )
如果俩个完全匹配的函数都是模板函数,那么最具体的优先
最具体是指编译器腿短使用哪种类型时执行的转换最少
16、decltype关键字 提供的参数可以是表达式
例:decltype(x+y) xpy;
17、auto关键字在C++中可用于后置返回类型提供的类型
例:anto func(int x,int y) ->double 等价于 double func(int x,int y)
auto 与decltype结合 anto func(int x,float y) ->decltype(x+y)