引用
指针:
其空间存放变量她址
二级指针:
int**p;//指针p存放int*类型变量的地址
a=b;//赋值,b空间的值放到a空间,a、b分别有各自空间
引用
&b=a;//b是a空间的别名,a、b同一个空间
- 必须初始化
- 要同类型的引用,类型要匹配
指针的引用
int* pa;
int* &pr = pa;
数组的引用
int ar[] = {...};
int (&br)[] = ar;
常引用
int a = 10;//a的值是可修改的
const int &b = a;//不能用b来修改a的值,但用a自己是可以修改的
const int a = 10;
int &b = a;//这是错误用法。a是常量是不可修改的,b是非常是可以修改的。只能用用别名修改,本名不能修改不符合现实习惯的。
double d = 3.14;
int &rd = d;//错误用法。类型不匹配
double d = 3.14;
const int &rd = d;//rd是中间临时变量的引用而非d的引用,临时变量是const的
临时变量
- 具有常性
- 函数返回产生临时变量,局部变量做返回值赋给临时变量后随函数栈消失,临时变量赋完值后消失。
传值、传引用
引用返回:
不要引用局部变量,局部变量调用结束消失,局部变量返回用传值。引用传值在传值和返回上效率较高。
内联
关键字:inline
inline 函数返回值类型 函数名{...}
- 内联函数可不进行调用(不进行压栈处理),函数的汇编语句在调用函数的汇编语句中展开,增加了调用函数内容,但减少了压栈时间。
②一种建设,若内联函数内部有循环,不做展开处理
③声名定义不能分开
④总结:
简单的函数建议内联,复杂函数(有递归归、循环)不内联
宏定义:复用性、不便调试
常量const、内联可替代宏
auto关键字
auto
C++11标准
- 推到变量类型
- 不推到参数的类型
auto a = x;//a有自己的空间
auto &a = x;//a是x的引用
auto a = &x;
auto *a = &x;
- 不能用来声名数组
- 遍历数组:
for(int i = 0;i < n;i++)
for(const auto &e:ar)
for(int e:ar)
list<int>::iterator it = mylist.begin();
auto it = mylist.begin();
计时:
#include <time.h>//引入头文件
size_t begin = clock();//获取开始时间
//任务...
size_t end = clock();//获取结束时间
size_t t = begin - end;//任务用时t