c++primer plus阅读笔记(二)
来源:互联网 发布:业务员管理客户软件 编辑:程序博客网 时间:2024/05/22 02:29
内联函数
内联函数与普通函数不同的是,内联函数直接将原函数拷贝到调用出,从而无须跳转,加快程序的运行速度缺点是每一个调用处都需要有内联函数的拷贝,内存开销增大在声明或定义前加上inline即可inline void fn(a);
引用
引用在声明的时候必须要初始化,更像const指针,一旦与某个变量关联起来就不可改(2) 可以有const指针,但是没有const引用;(3) 指针可以有多级,但是引用只能是一级(int **p;合法 而 int &&a是不合法的)(4) 指针的值可以为空,但是引用的值不能为NULL,并且引用在定义的时候必须初始化;(5) 指针的值在初始化后可以改变,即指向其它的存储单元,而引用在进行初始化后就不会再改变了,从一而终。(6)”sizeof引用”得到的是所指向的变量(对象)的大小,而”sizeof指针”得到的是指针本身的大小;(7)指针和引用的自增(++)运算意义不一样;
模板函数
模板函数和非模板可以同型,选择的时候优先选择非模板函数
//基本类型template <typename T>T fn (T&e){ return e}//类template <class T>T fn (T & e){return e}//typename 和class的区别,大多数情况下,两者都是一样的//但是在涉及到嵌套依赖类型的时候,typename就有用了//在如下的代码中,编译器是无法确定T::iterator是一//个变量还是说一个迭代器类型template<class T>void fn(const T &t){ T::iteratir * a;}//这时候使用 typename,就可以说明这是一个类型了,而不是一个变量template<class T>void fn(const T &t){ typename T::iteratir * a;}
模板的隐式实例化与显示实例化,以及显示具体化
//模板函数本身不是函数定义//当模板函数被调用的时候是根据运行时的参数确定类型的,//从而生成一个函数定义又称为函数实例化,这是隐式实例化template <typename T>void swap(T& a,T& b){ T temp=a; a=b; b=temp;}//与隐式实例化相对的是显示实例化,如下swap显示声明了T类型为int,或者调用的时候显示指定//可以减少类型推测加速编译时的性能template void swap<int>(int a,int b);//创建swap<double>(a,b);//声明//显示具体化模板//显示具体化函数是与模板相对的,当使用 job类型调用swap函数的时候,//直接使用一下的函数定义,这是显示实例化template<>void swap(job& a,job& b){ int temp=a.num; a.num=b.num; b.num=temp;}
decltype
根据括号内的表达式确定值
//此时的temp是不知道什么类型的,有可能是T1,T2或者别的template<class T1,class T2>void fn(T1 a,T2 b){ temp=a+b;}//C++11引入了新的关键字decltypedecltype(a+b) temp=a+b;//如果是表达式,则为表达式结果的临时表量的类型decltype(fn2()) temp=a+b;//如果是函数,则为函数的返回变量的类型decltype((a)) temp=a+b;//()返回的是一个常量值,如果是常量值,则返回的是该值类型的引用
auto与decltype的区别
int a=8, b=3;auto c=a+b; //运行时需要实际执行a+b,哪怕编译时就能推导出类型decltype(a+b) d; //编译期类型推导//不可以用auto c; 直接声明变量,必须同时初始化。
后置返回类型
//无法确定返回类型template<class T1, class T2>type? gt(T1 x,T2 y){ ... return x+y;} auto gt(T1 x,T2 y)->double{ ... return;}auto gt (T1 x,T2 y)->decltype(x+y){ ... return;}
阅读全文
0 0
- c++primer plus阅读笔记(二)
- 《C Primer Plus》阅读笔记(4)
- 《C Primer Plus》阅读笔记(3)
- 《C Primer Plus》阅读笔记(2)
- c++primer plus阅读笔记(一)
- 《C Primer Plus》开头阅读笔记
- C++primer plus阅读笔记第四章
- c++primer plus阅读笔记(四)
- c++primer plus阅读笔记(五)
- c++primer plus阅读笔记(六)
- c++primer plus阅读笔记(七)
- c++primer plus阅读笔记(八)
- c++primer plus阅读笔记(九)
- c++primer plus阅读笔记(十)
- 《C++primer》阅读笔记<二>
- C Primer Plus(二)
- C Primer Plus 学习笔记系列之(二)
- C Primer Plus汇总 (二)错误笔记
- kubernetes初级安装
- 安卓软键盘弹起时想向上平移布局但布局却被挤压得解决办法
- nginx——linux下的安装
- 网站收集
- 怎样拆分ABBYY FineReader中文档
- c++primer plus阅读笔记(二)
- [js高手之路]gulp教程-从入门到项目中快速上手使用
- 默认关闭数据流量
- C++中的异常处理(一)
- linux读写锁
- MongoDB-2.6.0 (OpenLogic CentOS7.2)
- Js省市二级联动
- python列表嵌套
- Apache Shiro 实现认证