1:decltype关键字
有时我们希望从表达式的类型推断出要定义的变量类型,但是不想用该表达式的值初始化变量(如果要初始化就用auto了)。为了满足这一需求,C++11新标准引入了decltype类型说明符,它的作用是选择并返回操作数的数据类型,在此过程中,编译器分析表达式并得到它的类型,却不实际计算表达式的值。
基本用法:
int tmp = 2;
decltype(tmp) a;//此时a的类型为 int
可以保留const,和引用和指针结合
2:右值引用
右值引用就是必须绑定到右值(一个临时对象、将要销毁的对象)的引用,一般表示对象的值。
右值引用可实现转移语义和精确传递,它的主要目的有两个方面:
消除两个对象交互时不必要的对象拷贝,节省运算存储资源,提高效率。
能够更简洁明确地定义泛型函数
(这里还有一些需要深究的,时间原因,日后再补充吧。。 这个老哥写的很仔细https://www.jianshu.com/p/d19fc8447eaa,移动构造函数,移动拷贝函数,完美转发等)
3:placement new
int main()
{
char mem[100];
mem[0] = 'A';
mem[1] = '\0';
mem[2] = '\0';
mem[3] = '\0';
cout << (void*)mem << endl;
A* p = new (mem)A;
cout << p << endl;
p->show();
p->~A();
getchar();
}
A*p = new(mem)A;的时候,p是利用好了已经申请好的空间。而真正申请空间早已完成。
4:vector相关
https://blog.csdn.net/cxc576502021/article/details/83020617
5:shared_ptr
最安全的分配就是调用一个make_shared的标准库函数 auto pt = make_shared<int>(7);
可以认为每个shared_ptr都有一个关联的计数器,称为引用计数。当shared_ptr销毁的时候引用计数会递减,一旦引用计数为0,就会自动释放自己管理的对象。
https://blog.csdn.net/worldwindjp/article/details/18843087
6:
C++ 多态分类及实现:
重载多态(编译期):函数重载、运算符重载
子类型多态(运行期):虚函数
参数多态性(编译期):类模板、函数模板
强制多态(编译期/运行期):基本类型转换、自定义类型转换
7:
static_cast :用于非多态转换。不执行运行时的类型检查。进行向上转换(子类->父类)
dynamic_cast:用于多态类型的转换,执行运行时的类型检查,只适用于指针或者引用,可以向上转换和向下转换。