范围for,迭代器,显示类型转换,左值右值,static,const_cast和重载,函数指针

文章目录

    • 范围for
    • 什么时候不能用范围for?
    • 迭代器怎么用?
    • 显示类型转换
    • 左值、右值
    • 函数指针
    • 函数指针做返回值
    • const_cast和重载
    • 函数重载,形参顶层const
    • static

范围for

改变字符,用引用

for (auto &c : s)   
	//...
cout << s << endl;

什么时候不能用范围for?

在循环体中向vector添加元素时不能用

迭代器怎么用?

定义:
vector ::iterator it;
vector ::const_iterator it;只读,叫常量迭代器
解引用:
*iter:返回元素的引用
iter->成员:相当于(*iter).成员

如果容器是常量,则迭代器只能用常量迭代器

显示类型转换

cast:铸造

搞这个说明设计程序有缺陷

运行时类型识别:dynamic_cast

通俗的类型转换,但是不能包含底层const:static_cast

去掉const(摘帽子),函数重载大有用处:const_cast

看作是其他类型,并没有实际转换(开美颜了):reinterpret_cast

左值、右值

左值:用这个值的地址(家庭住址)

右值:用这个值的内容(人)

函数指针

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

修饰函数内部的局部变量后,这个变量在函数外还有效,生命周期直到程序结束

你可能感兴趣的:(c++)