左值、右值、浅拷贝、深拷贝、移动语义、RVO、OpenFOAM中的autoPtr类和tmp类、std::unordered_map、函数指针(2021.01.17)

本文探讨了C++中的左值与右值概念、引用与移动语义、智能指针等高级主题,并对比了std::unordered_map与std::map的不同特性。此外,还介绍了函数指针的应用及OpenFOAM中autoPtr与tmp类的使用方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

2021.01.17

C++ and OpenFOAM

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值