1.依赖文件
#include <stddef.h>
#include"xtr1common.h"
MSVC源码阅读笔记1 - xtr1common.h-CSDN博客
2.stddef.h用到的内容
typedef unsigned __int64 size_t;
typedef __int64 ptrdiff_t;
(1) __int64就是编译器内置的64位整数类型,具体是什么类型就不要管了,只要知道是64位整数就好。
3类型定义
using ::ptrdiff_t;
using ::size_t;
using max_align_t = double;
using nullptr_t = decltype(nullptr);
(1)引入全局空间的ptrdiff_t和size_t到std空间中。
(2)定义nullptr_t和max_align_t类型。
4.byte
enum class byte : unsigned char {};
template <class _IntType, enable_if_t<is_integral_v<_IntType>, int> = 0>
[[nodiscard]] constexpr byte operator<<(const byte _Arg, const _IntType _Shift) noexcept {
return static_cast<byte>(static_cast<unsigned char>(static_cast<unsigned int>(_Arg) << _Shift));
}
template <class _IntType, enable_if_t<is_integral_v<_IntType>, int> = 0>
[[nodiscard]] constexpr byte operator>>(const byte _Arg, const _IntType _Shift) noexcept {
return static_cast<byte>(static_cast<unsigned char>(static_cast<unsigned int>(_Arg) >> _Shift));
}
[[nodiscard]] constexpr byte operator|(const byte _Left, const byte _Right) noexcept {
return static_cast<byte>(
static_cast<unsigned char>(static_cast<unsigned int>(_Left) | static_cast<unsigned int>(_Right)));
}
[[nodiscard]] constexpr byte operator&(const byte _Left, const byte _Right) noexcept {
return static_cast<byte>(
static_cast<unsigned char>(static_cast<unsigned int>(_Left) & static_cast<unsigned int>(_Right)));
}
[[nodiscard]] constexpr byte operator^(const byte _Left, const byte _Right) noexcept {
return static_cast<byte>(
static_cast<unsigned char>(static_cast<unsigned int>(_Left) ^ static_cast<unsigned int>(_Right)));
}
[[nodiscard]] constexpr byte operator~(const byte _Arg) noexcept {
return static_cast<byte>(static_cast<unsigned char>(~static_cast<unsigned int>(_Arg)));
}
template <class _IntType, enable_if_t<is_integral_v<_IntType>, int> = 0>
constexpr byte& operator<<=(byte& _Arg, const _IntType _Shift) noexcept {
return _Arg = _Arg << _Shift;
}
template <class _IntType, enable_if_t<is_integral_v<_IntType>, int> = 0>
constexpr byte& operator>>=(byte& _Arg, const _IntType _Shift) noexcept {
return _Arg = _Arg >> _Shift;
}
constexpr byte& operator|=(byte& _Left, const byte _Right) noexcept {
return _Left = _Left | _Right;
}
constexpr byte& operator&=(byte& _Left, const byte _Right) noexcept {
return _Left = _Left & _Right;
}
constexpr byte& operator^=(byte& _Left, const byte _Right) noexcept {
return _Left = _Left ^ _Right;
}
template <class _IntType, enable_if_t<is_integral_v<_IntType>, int> = 0>
[[nodiscard]] constexpr _IntType to_integer(const byte _Arg) noexcept {
return static_cast<_IntType>(_Arg);
}
其他文件使用byte的话会引用过来,这里先简单看看,记住有这个东西就行。
5. max_align_t
namespace std{...}
using ::std::max_align_t;
目前不知道什么地方会用到。