std::endian

来自cppreference.com
< cpp‎ | types
 
 
 
类型支持
基本类型
基础类型
定宽整数类型 (C++11)
数值极限
C 数值极限接口
运行时类型信息
类型特性
类型类别
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
类型属性
(C++11)
(C++11)
(C++14)
(C++11)
(C++11)(C++20 前)
(C++11)(C++20 中弃用)
(C++11)
类型特性常量
元函数
(C++17)
端序
endian
(C++20)
受支持操作
关系与属性查询
(C++11)
(C++11)
类型修改
(C++11)
(C++11)
(C++11)
类型变换
(C++11)
(C++11)
(C++17)
(C++11)(C++20 前)
(C++17)
 
定义于头文件 <type_traits>
enum class endian

{
    little = /*implementation-defined*/,
    big    = /*implementation-defined*/,
    native = /*implementation-defined*/

};
(1) (C++20 起)

指示所有标量类型的端序:

  • 若所有标量类型均为小端,则 std::endian::native 等于 std::endian::little
  • 若所有标量类型均为大端,则 std::endian::native 等于 std::endian::big

亦支持极端情况:

  • 若所有标量类型拥有等于 1 的 sizeof ,则端序无影响,且 std::endian::little, std::endian::bigstd::endian::native 三个值相同
  • 若平台使用混合端序,则 std::endian::native 既不等于 std::endian::big 亦不等于 std::endian::little

[编辑] 可能的实现

enum class endian
{
#ifdef _WIN32
    little = 0,
    big    = 1,
    native = little
#else
    little = __ORDER_LITTLE_ENDIAN__,
    big    = __ORDER_BIG_ENDIAN__,
    native = __BYTE_ORDER__
#endif
};

[编辑] 示例