分析C/C++大型开源项目-(1)

分析C/C++大型开源项目-(1)

开始分析开源项目源代码后发现自己挺多不足的,以该博客将发现是不足全部记下来

阅读ReadMe

不管百度还是谷歌上有多少源代码解析的,都要看一看ReadMe

枚举类型

枚举类型在大型项目里面用的挺多的。

在我看来就相当于是一个专门针对某一个类的宏定义

相当于一个宏定义限制作用域在一个枚举类里面

https://www.cnblogs.com/shrimp-can/p/5171110.html

static_cast和dynamic_cast

static_cast有点类型C语言的强制转换

dynamic_cast用于类直接的相互转换

https://blog.csdn.net/u014624623/article/details/79837849

匿名空间

namespace 不加名字,直接用

为了防止命名冲突或者多重赋值,这个还挺好用的,只需要不和最基本的命名空间的内容起冲突就好了,匿名namespace也完美代替了添加static来防止起冲突和被别的地方调用

https://www.cnblogs.com/youxin/p/4308364.html

其实根本上就相当于编译器给namespace编了个名字,然后使用,但是外面不知道是什么也用不了。

mutable关键字

mutable关键字

这个关键字定义的东西表示在任何地方都可以被修改

https://www.jb51.net/article/62352.htm

C++11新特性

看开源项目里面也经常用到新特性,这里把C++ Primer Plus里面的我觉得有可能用得上的记一下

扩大了{}这个大括号的使用范围

{}可以用于所有内置类型和用户定义的类,使用初始化列表的适合可以加=,也可以不用添加=

分析C/C++大型开源项目-(1)

 

 

创建类的适合也可以用大括号来调用构造函数

分析C/C++大型开源项目-(1)

 

 

自动推导类型

采用auto关键字,在定义的时候直接初始化,但是这里要求显示初始化,也就是赋值的值需要显示的,比如

auto maton = 112;//maton的type是int
auto pt = &maton;//pt的type是int *
double fm(double,int);
auto pf = fm; //pf是double(*)(double,int),也就是一个函数指针

还有decltype关键字

decltype将变量的类型声明为表达式指定的类型。例如:

decltype(x) y;//让y的类型和X相同,其中x是一个表达式

智能指针

智能指针内部是采用的模板类来实现的,auto_ptr是98标准在c++11中已经抛弃了,但是auto_ptr、unique_ptr和shared_ptr三个智能指针模板都定义了类似指针的对象,可以直接或间接将new获得的地址赋值给智能指针的对象,当智能指针过期时,它的析构函数会用delete来释放内存。因此如果将new的返回地址赋值给这些对象就不用记住释放它们了。

分析C/C++大型开源项目-(1)

 

 

auto_ptr、unique_ptr、shared_ptr三个智能指针原理上是一样的,但是又有着区别,unique_ptr和shared_ptr比auto_ptr使用起来要安全得多。

unique_ptr的指针只能独占一个内存地址,一个内存地址只能给一个指针中,而shared_ptr可以多个指针指向同一个内存地址,只有当指向同一个内存地址的所有shared_ptr指针释放后才会释放该内存地址的内容

上一篇:多任务学习——【KDD 2018】MMoE


下一篇:在使用wsl时遇见的一点问题