echo 输出的文字变换颜色或显示效果的时候,要使用参数 -e
格式
1 | echo -e "\033[控制码m文字\033[0m" |
其中 \033 是 ESC 键的八进制,\033[ 即告诉终端后面是设置颜色的参数,显示方式,前景色,背景色均是数字
参考文章:auto_ptr, unique_ptr, shared_ptr and weak_ptr
参考文章:auto_ptr, unique_ptr, shared_ptr and weak_ptr智能指针讲解
C++ 库提供以下类型的智能指针实现:
头文件和命名空间:
1 | #include <memory> |
之前编码时使用 ACE_DLL 打开 so 动态库时,一直失败,后来打印 error 信息查看失败原因是 undefined symbol,如下所示:
发现是相关 boost 库没有链接,修改相关 CMakeLists.txt 添加相关库链接,重新编译就OK了;
后来试了下自己编写的 so 库,使用库中的class以及其中的方法时,只加了相关的头文件,没有链接相关的 so ,但是可以open成功,运行时出错。
参考文章:C++ 11 Lambda表达式
C++11 引入了 Lambda 表达式。利用 Lambda 表达式,可以方便的定义和创建匿名函数。
lambda 表达式完整的声明格式和各项具体含义如下:
1 | 声明格式: |
C++中的explicit关键字用来修饰类的构造函数,表明该构造函数是显式的,explicit构造函数是用来防止隐式转换的。
隐式转换:
如果C++类的构造函数有一个参数,那么在编译的时候就会有一个缺省的转换操作:将该构造函数对应数据类型的数据转换为该类对象。
如下面所示:
参考文章:C++虚函数表剖析
参考文章:C++虚函数表分析
参考文章:C++中基类的析构函数为什么要用virtual虚析构函数
C++ 中的多态是用虚函数实现的:子类覆盖(重写)父类的虚函数,然后声明一个指向子类对象的父类指针,如 Base* base = new Derived(); 当调用base->func(),调用的是子类的Derived::func()。
1 | class Base |
这种机制使用了一种动态绑定的技术,技术核心是虚函数表(简称虚表)。