C++11新特性总结
C++11新特性总结
final关键字
使派生类不可覆盖它所修饰的虚函数
override描述符
如果派生类在虚函数声明时使用了override描述符,那么该函数必须重载其基类中的同名函数
关于左值,右值
C++中所有的值都必然属于左值、右值二者之一。左值是指表达式结束后依然存在的持久化对象,右值是指表达式结束时就不再存在的临时对象。所有的具名变量或者对象都是左值,而右值不具名。很难得到左值和右值的真正定义,但是有一个可以区分左值和右值的便捷方法:看能不能对表达式取地址,如果能,则为左值,否则为右值。
右值引用
左值是指可以出现在=左侧者,
右值是指只能出现在=右侧者
临时对象是个右值
右值引用与move语义的关系
- 关联性: 右值引用是实现move语义的基础
- 作用: 允许”偷取”临时对象的资源而非复制
- 应用场景: 容器操作中大量临时对象的处理
移动语义
右值则临时对象
1 | c.insert(ite,Vtype(buf)); |
左值则使用move关键字
1 | M c1(c); |
- 核心机制
- 当赋值右侧是右值时,左侧对象可直接”偷取”资源
- 避免不必要的资源分配和拷贝
- 实现要点
- 类需要同时实现拷贝和移动语义版本
- 移动操作后原对象应处于有效但未定义状态
- 容器需要支持右值版本的插入操作
- 注意事项
- 被移动后的对象不应再使用
- 移动构造函数应标记为noexcept
- 临时对象自动被视为右值
- 典型应用
- 容器扩容时的元素迁移
- 返回临时对象的优化
- 明确不再使用的左值资源转移
应用
- 函数返回值优化。
- STL 容器的高效插入与操作。
- 动态资源管理(如智能指针)。