【C/C++】随笔2

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:用于多态类型的转换,执行运行时的类型检查,只适用于指针或者引用,可以向上转换和向下转换。

 

posted @ 2019-09-26 14:57  Amadios  阅读(93)  评论(0编辑  收藏  举报