分析C/C++大型开源项目-(1)
2021/5/7 12:26:37
本文主要是介绍分析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里面的我觉得有可能用得上的记一下
扩大了{}这个大括号的使用范围
{}可以用于所有内置类型和用户定义的类,使用初始化列表的适合可以加=,也可以不用添加=
创建类的适合也可以用大括号来调用构造函数
自动推导类型
采用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的返回地址赋值给这些对象就不用记住释放它们了。
auto_ptr、unique_ptr、shared_ptr三个智能指针原理上是一样的,但是又有着区别,unique_ptr和shared_ptr比auto_ptr使用起来要安全得多。
unique_ptr的指针只能独占一个内存地址,一个内存地址只能给一个指针中,而shared_ptr可以多个指针指向同一个内存地址,只有当指向同一个内存地址的所有shared_ptr指针释放后才会释放该内存地址的内容
这篇关于分析C/C++大型开源项目-(1)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23增量更新怎么做?-icode9专业技术文章分享
- 2024-11-23压缩包加密方案有哪些?-icode9专业技术文章分享
- 2024-11-23用shell怎么写一个开机时自动同步远程仓库的代码?-icode9专业技术文章分享
- 2024-11-23webman可以同步自己的仓库吗?-icode9专业技术文章分享
- 2024-11-23在 Webman 中怎么判断是否有某命令进程正在运行?-icode9专业技术文章分享
- 2024-11-23如何重置new Swiper?-icode9专业技术文章分享
- 2024-11-23oss直传有什么好处?-icode9专业技术文章分享
- 2024-11-23如何将oss直传封装成一个组件在其他页面调用时都可以使用?-icode9专业技术文章分享
- 2024-11-23怎么使用laravel 11在代码里获取路由列表?-icode9专业技术文章分享
- 2024-11-22怎么实现ansible playbook 备份代码中命名包含时间戳功能?-icode9专业技术文章分享