2021.01.17
C++ and OpenFOAM
- 左值(lvalue):locator value 可寻址的数据,可位于等号任意侧
- 右值(rvalue):read value 不可寻址的数据,无法位于等号左侧
- 常量左值可以引用引用右值,但不能改变右值;右值引用可以改变右值
- std::move() 将左值转为右值
- 浅拷贝:拷贝被传入指针的地址
- 深拷贝:分配一块新的内存来拷贝,该内存与被传入指针所指向的对象的大小相同
- 移动语义:通过移动构造函数实现,转移资源所有权而免去深拷贝负担,资源的原所有者不再拥有和使用该资源;可优化拷贝对象的性能,无法优化基本数据类型的拷贝性能
- 函数返回值为局部变量时,若函数返回值为右值引用,则局部变量的资源将不会被立即释放,而是由右值引用变量管理其生命周期
- RVO返回值优化:减少函数返回时拷贝构造函数的多余调用;当返回对象在运行时才能确定时,返回值无法优化
- OpenFOAM中的autoPtr类近似于C++中的std::unique_ptr,OpenFOAM中的tmp类近似于C++中的std::shared_ptr
- 静态变量在编译后就完成了初始化
- std::unordered_map的内部实现是Hashtable,时间复杂度是O(1),空间占用率较高,无序排列
- std::map的内部实现是红黑树,时间复杂度是O(Log N),但内存使用率较低,有序排列
- 函数指针声明:返回类型名 (*函数指针名)(形参列表)
- 函数指针使用场景:想将A函数作为形参传入B函数,并在B函数中使用A函数时,B函数的形参需要声明为函数指针;
- 定义一种新的数据类型的别名,该数据类型为函数指针类型,可以用该类型声明函数指针变量,声明的函数指针变量所指向的函数的返回类型和形参列表需要与新的数据类型相同:typedef 返回类型名 (*新类型名)(形参列表)
- typedef的作用是为数据类型的定义别名
- 函数指针可被显式使用:(*FuncPtr)(实参);也可被隐式使用:FuncPtr(实参)
- 智能指针是类,map也是类;