范围for
改变字符,用引用
for (auto &c : s)
//...
cout << s << endl;
什么时候不能用范围for?
在循环体中向vector添加元素时不能用
迭代器怎么用?
定义:
vector<int> ::iterator it;
vector<int> ::const_iterator it;只读,叫常量迭代器
解引用:
*iter:返回元素的引用
iter->成员:相当于(*iter).成员
如果容器是常量,则迭代器只能用常量迭代器
左值、右值
左值:用这个值的地址(家庭住址)
右值:用这个值的内容(人)
函数指针
int(*p)(int,int);
p=fun;
函数指针做返回值
auto fun(int)->int(*)(int,int);
或者
using pf=int(*)(int,int);
pf fun(int);
const_cast和重载
用常量版本实现非常量版本,const_cast可以去掉const属性也可以加上
函数重载,形参顶层const
由于非const可以转换成const,也就是说可以加上顶层const,所以形参如果是有无顶层const的区别,则不能重载。
static
修饰函数内部的局部变量后,这个变量在函数外还有效,生命周期直到程序结束