(4)#if 的参数形式,我们都知道其条件要可以转为 布尔量才可以。
测试一下:
(5) 模板类 _Storage_for,根据源码,其是可以存储一个未被初始化的值:
template <class _Ty> // uninitialized space to store a _Ty
struct _Storage_for // 本模板类用一块未初始化的空间存储 _Ty 类型的数据
{
alignas(_Ty) unsigned char _Storage[sizeof(_Ty)]; // 本类的数据成员
_Storage_for() = default; // 默认的构造函数
_Storage_for(const _Storage_for&) = delete; // 禁止 copy 构造函数
_Storage_for& operator=(const _Storage_for&) = delete; // 禁止 copy 赋值运算符函数
_Ty& _Ref() { return reinterpret_cast<_Ty&>(_Storage); } // 返回对本类数据成员的引用
_Ty* _Ptr() { return reinterpret_cast<_Ty*>(&_Storage); } // 返回本类中数据成员的地址
};
++ 举例测试:
++ 以及:
++ 为什么分析这些类,因为后面的 atomic 模板 ,会用到这些基础类。
(6) 预处理指令 #pragma warning(suppress : 5):
(7) 内存访问约束 memory_order_relaxed ,用于多线程的内存访问同步:
还有其它更严格的内存访问控制,见下篇。
(8)
谢谢