C++11

标准文档 中当前头文件是通用工具库(General utilities library)中的部分内容,为了更好的表述其内容,本手册将其移至语言支持库(Language support library)中的 类型支持 主题中的 类型特征 子主题中 。

语言支持库(参考手册) ​语言支持库(标准)

通用工具库(参考手册) ​通用工具库(标准)

  • 辅助类

    integral_constant 用来定义指定类型及指定值的编译时常量(Compile-time constant)
    true_type std::integral_constant<bool, true>
    false_type std::integral_constant<bool, false>

    基本类型类别

    is_void 检测指定类型是否是 void 类型
    is_integral 检测指定类型是否是一个整数(Integral)类型
    is_floating_point 检测指定类型是否是一个浮点数(Floating-point)类型
    is_array 检测指定类型是否是一个数组(Array)类型
    is_enum 检测指定类型是否是一个枚举(Enumeration)类型
    is_union 检测指定类型是否是一个共用体(Union)类型
    is_class 检测指定类型是否是一个类类型
    is_function 检测指定类型是否是一个函数类型
    is_pointer 检测指定类型是否是一个指针类型
    is_lvalue_reference 检测指定类型是否是一个左值引用(Lvalue reference)类型
    is_rvalue_reference 检测指定类型是否是一个右值引用(Rvalue reference)类型
    is_member_object_pointer 检测指定类型是否是一个指向非静态成员对象(Non-static member object)的指针
    is_member_function_pointer 检测指定类型是否是一个指向非静态成员函数(Non-static member function)的指针

    复合类型类别

    is_fundamental 检测指定类型是否是一个基础(Fundamental)类型
    is_arithmetic 检测指定类型是否是一个算述(Arithmetic)类型
    is_scalar 检测指定类型是否是一个标量(Scalar)类型
    is_object 检测指定类型是否是一个对象(Object)类型
    is_compound 检测指定类型是否是一个复合(Compound)类型
    is_reference 检测指定类型是否是一个左值引用(Lvalue reference)或右值引用(Rvalue reference)
    is_member_pointer 检测指定类型是否是一个指向非静态成员对象(Non-static member object)或非静态成员函数(Non-static member function)的指针

    类型属性

    is_const 检测指定类型是否被 const 限定
    is_volatile 检测指定类型是否被 volatile 限定
    is_trivial 检测指定类型是否是平凡(Trivial)
    is_trivially_copyable 检测指定类型是否可平凡拷贝(Trivially copyable)
    is_standard_layout 检测指定类型是否是一个标准层次结构(Standard-layout)类型
    is_pod 检测指定类型是否是 CPOD类型
    is_literal_type 检测指定类型是否是一个字面(Literal)类型
    is_empty 检测指定类型是否是一个类(classstruct 但不包括 union)且无数据
    is_polymorphic 检测指定类型是否是一个多态(Polymorphic)类类型
    is_abstract 检测指定类型是否是一个抽像(Abstract)类类型
    is_signed 检测指定类型是否是一个带符号算术类型(Signed arithmetic type)
    is_unsigned 检测指定类型是否是一个无符号算术类型(Unsigned arithmetic type)

    所支持的操作

    is_constructible 检测一个类型是否拥有指定参数的构造函数
    is_trivially_constructible 检测一个类型是否拥有指定参数的平凡(Trivially)的构造函数
    is_nothrow_constructible 检测一个类型是否拥有指定参数的无异常抛出(Nothrow)的构造函数
    is_default_constructible 检测一个类型是否拥有默认(Default)构造函数
    is_trivially_default_constructible 检测一个类型是否拥有平凡的默认构造函数
    is_nothrow_default_constructible 检测一个类型是否拥有无异常抛出的默认构造函数
    is_copy_constructible 检测一个类型是否拥有拷贝构造函数
    is_trivially_copy_constructible 检测一个类型是否拥有平凡的拷贝构造函数
    is_nothrow_copy_constructible 检测一个类型是否拥有无异常抛出的拷贝构造函数
    is_move_constructible 检测一个类型是否拥有移动构造函数
    is_trivially_move_constructible 检测一个类型是否拥有平凡的移动构造函数
    is_nothrow_move_constructible 检测一个类型是否拥有无异常抛出的移动构造函数
    is_assignable 检测一个类型是否定义了以另一个类型为参数的用于赋值的赋值操作符(operator=
    is_trivially_assignable 检测一个类型是否定义了以另一个类型为参数的用于平凡赋值的赋值操作符
    is_nothrow_assignable 检测一个类型是否定义了以另一个类型为参数的用于无异常抛出赋值的赋值操作符
    is_copy_assignable 检测一个类型是否定义了用于拷贝赋值的赋值操作符(operator=
    is_trivially_copy_assignable 检测一个类型是否定义了用于平凡拷贝赋值的赋值操作符
    is_nothrow_copy_assignable 检测一个类型是否定义了用于无异常抛出拷贝赋值的赋值操作符
    is_move_assignable 检测一个类型是否定义了用于移动赋值的赋值操作符(operator=
    is_trivially_move_assignable 检测一个类型是否定义了用于平凡移动赋值的赋值操作符
    is_nothrow_move_assignable 检测一个类型是否定义了用于无异常抛出移动赋值的赋值操作符
    is_destructible 检测一个类型是否定义了用于析构的析构函数
    is_trivially_destructible 检测一个类型是否定义了用于平凡析构的析构函数
    is_nothrow_destructible 检测一个类型是否定义了用于无异常抛出析构的析构函数
    has_virtual_destructor 检测一个类型是否定义了虚析构函数(Virtual destructor)

    属性查询

    alignment_of 获得指定类型的对齐(Alignment)需求
    rank 获得指定数组类型的维数
    extent 获得指定数组类型中指定维的区间大小(即元素个数)

    类型关系

    is_same 检测两个类型是否相同
    is_base_of 检测一个类型是否继承于另一个类型
    is_convertible 检测一个类型是否可以转化成另一个类型

    const 及 volatility 类型修饰符

    remove_cv 从指定类型中移除 const 及 volatile 修饰符
    remove_const 从指定类型中移除 const 修饰符
    remove_volatile 从指定类型中移除 volatile 修饰符
    add_cv 为指定类型添加 const 及 volatile 修饰符
    add_const 为指定类型添加 const 修饰符
    add_volatile 为指定类型添加 volatile 修饰符

    引用(Reference)

    remove_reference 从指定类型中移除引用(Reference)属性
    add_lvalue_reference 为指定类型添加左值引用(Lvalue reference)属性
    add_rvalue_reference 为指定类型添加右值引用(Rvalue reference)属性

    指针

    remove_pointer 从指定类型中移除指针属性
    add_pointer 为指定类型添加指针属性

    符号修改器(Sign modifier)

    make_signed 将指定整数类型添加带符号(Signed)属性
    make_unsigned 将指定整数类型添加无符号(Unsigned)属性

    数组

    remove_extent 返回移除指定数组类型的第一维后获得的类型
    remove_all_extents 返回移除指定数组类型的所有维后获得的类型,即返回数组中元素的类型

    杂项变换

    aligned_storage 定义了一个可以用来作为指定大小指定对齐的未初始化存储空间的类型
    aligned_union 定义了一个可以用来作为指定大小满足所有指定类型的对齐需求的未初始化存储空间的类型
    decay 类型衰变
    enable_if 条件满足则提供类型
    conditional 通过条件选择类型
    common_type 通过类型列表推断通用类型
    underlying_type 获得给定枚举类型的底层整数类型
    result_of 通过函数调用表达式推断返回类型
  • namespace std {
        // helper class:
        template <class T, T v> struct integral_constant;
        typedef integral_constant<bool, true> true_type;
        typedef integral_constant<bool, false> false_type;
        // primary type categories:
        template <class T> struct is_void;
        template <class T> struct is_integral;
        template <class T> struct is_floating_point;
        template <class T> struct is_array;
        template <class T> struct is_pointer;
        template <class T> struct is_lvalue_reference;
        template <class T> struct is_rvalue_reference;
        template <class T> struct is_member_object_pointer;
        template <class T> struct is_member_function_pointer;
        template <class T> struct is_enum;
        template <class T> struct is_union;
        template <class T> struct is_class;
        template <class T> struct is_function;
        // composite type categories:
        template <class T> struct is_reference;
        template <class T> struct is_arithmetic;
        template <class T> struct is_fundamental;
        template <class T> struct is_object;
        template <class T> struct is_scalar;
        template <class T> struct is_compound;
        template <class T> struct is_member_pointer;
        // type properties:
        template <class T> struct is_const;
        template <class T> struct is_volatile;
        template <class T> struct is_trivial;
        template <class T> struct is_trivially_copyable;
        template <class T> struct is_standard_layout;
        template <class T> struct is_pod;
        template <class T> struct is_literal_type;
        template <class T> struct is_empty;
        template <class T> struct is_polymorphic;
        template <class T> struct is_abstract;
        template <class T> struct is_signed;
        template <class T> struct is_unsigned;
        template <class T, class... Args> struct is_constructible;
        template <class T> struct is_default_constructible;
        template <class T> struct is_copy_constructible;
        template <class T> struct is_move_constructible;
        template <class T, class U> struct is_assignable;
        template <class T> struct is_copy_assignable;
        template <class T> struct is_move_assignable;
        template <class T> struct is_destructible;
        template <class T, class... Args> struct is_trivially_constructible;
        template <class T> struct is_trivially_default_constructible;
        template <class T> struct is_trivially_copy_constructible;
        template <class T> struct is_trivially_move_constructible;
        template <class T, class U> struct is_trivially_assignable;
        template <class T> struct is_trivially_copy_assignable;
        template <class T> struct is_trivially_move_assignable;
        template <class T> struct is_trivially_destructible;
        template <class T, class... Args> struct is_nothrow_constructible;
        template <class T> struct is_nothrow_default_constructible;
        template <class T> struct is_nothrow_copy_constructible;
        template <class T> struct is_nothrow_move_constructible;
        template <class T, class U> struct is_nothrow_assignable;
        template <class T> struct is_nothrow_copy_assignable;
        template <class T> struct is_nothrow_move_assignable;
        template <class T> struct is_nothrow_destructible;
        template <class T> struct has_virtual_destructor;
        // type property queries:
        template <class T> struct alignment_of;
        template <class T> struct rank;
        template <class T, unsigned I = 0> struct extent;
        // type relations:
        template <class T, class U> struct is_same;
        template <class Base, class Derived> struct is_base_of;
        template <class From, class To> struct is_convertible;
        // const-volatile modifications:
        template <class T> struct remove_const;
        template <class T> struct remove_volatile;
        template <class T> struct remove_cv;
        template <class T> struct add_const;
        template <class T> struct add_volatile;
        template <class T> struct add_cv;
        // reference modifications:
        template <class T> struct remove_reference;
        template <class T> struct add_lvalue_reference;
        template <class T> struct add_rvalue_reference;
        // sign modifications:
        template <class T> struct make_signed;
        template <class T> struct make_unsigned;
        // array modifications:
        template <class T> struct remove_extent;
        template <class T> struct remove_all_extents;
        // pointer modifications:
        template <class T> struct remove_pointer;
        template <class T> struct add_pointer;
        // other transformations:
        template <std::size_t Len, std::size_t Align> struct aligned_storage;
        template <class T> struct decay;
        template <bool, class T = void> struct enable_if;
        template <bool, class T, class F> struct conditional;
        template <class... T> struct common_type;
        template <class T> struct underlying_type;
        template <class> class result_of; // not defined
        template <class F, class... ArgTypes> class result_of<F(ArgTypes...)>;
    } // namespace std
  • template <class T, T v>
    struct integral_constant {
        static constexpr T value = v;
        typedef T value_type;
        typedef integral_constant<T,v> type;
        constexpr operator value_type() { return value; }
    };
    typedef integral_constant<bool, true> true_type;
    typedef integral_constant<bool, false> false_type;