C++
-
C++ 移动语义
C++移动语义的目的在于转移对象的所有权- 接管资源
void My::take(Book && iBook) { mBook = std::move(iBook); //将没人要的iBook,拿过来据为己有 }
- 避免拷贝
std::vector v = ...; take(std::move(v)); // 直接move进了函数g里面,不用拷贝
- 接管资源
-
static 关键字
- 作用于全局变量和函数:内部链接性
- 作用于局部变量:静态变量区,生命周期一直延续到程序结束
- 作用于类成员和类方法:类的所有对象共享
-
C++ 模板编程的优势劣势
- 灵活,节省开发时间
- 调试困难,编译时间长
-
虚函数表是在什么时候创建的?
编译期间 -
shared_ptr 是否线程安全?
-
原子类型?
C++11新特性,对开发者掩盖互斥锁、临界区,抽象接口,不受编译器限制。- 变量自增是原子操作吗?
不是,可能需要先从内存load到寄存器,自增后再返到内存 - 内存模型
编译器可能会重排指令以提高性能,这会损害数据的一致性
memory_order_relaxed:不对执行顺序做任何保证
memory_order_seq_cst:全部存取都按照顺序执行
memory_order_acquire:本线程中,所有后续的读操作,必须在本条原子操作完成后执行
memory_order_release:本线程中,所有之前的写操作完成后,才能执行本原子操作
memory_order_consume: 本线程中,所有后续的有关本数据的操作,必须在本条原子操作完成之后执行
- 变量自增是原子操作吗?