美文网首页
元编程基础(二):type_traits

元编程基础(二):type_traits

作者: 秋冬不寒 | 来源:发表于2022-04-29 23:54 被阅读0次

    概述

    type_trait在C++11之后引入,使用头文件<type_traits>获取相应功能。该头文件定义了一系列类来获取编译时的类型信息。
    主要包括:

    • Helper classes: 帮助创建编译时常量的标准类。
    • Type traits: 以编译时常量值的形式获取类型特征的类。
    • Type transformations: 通过对现有类型应用特定转换来获得新类型的类。
      c++的类型大概有如下几类:


      类型表.png

    示例

    下面我们看一段代码:

    #include <iostream>
    #include <type_traits>
    int main() {
        std::remove_reference<int&>::type h1 = 3;
        std::remove_reference_t<int&> h2 = 4;
        int h3 = 5;
        std::cout << h1 << " " << h2;
    }
    
    

    remove_reference将int & 转换为int 类型,并声明变量h1; remove_reference_t实现了相同的功能。特别的,从下图的汇编的代码中,我们可以看到h1,h2,h3均对应一个DWORD(2字节的字)

    对应汇编代码.png

    通常,编写泛型代码会使用这个库进行类型变换。

    类型变换

    常-易变性说明符

    remove_cv remove_const remove_volatile (C++11) 从给定类型移除 const 或/与 volatile 限定符
    add_cv add_const add_volatile (C++11) 添加 const 或/与 volatile 限定符到给定类型

    引用

    remove_reference (C++11) ```` 从给定类型移除引用add_lvalue_referenceadd_rvalue_reference (C++11)``` 向给定类型添加左值右值引用

    指针

    remove_pointer (C++11) 移除给定类型的一层指针
    add_pointer (C++11) 对给定类型添加一层指针

    符号修饰符

    make_signed (C++11) 使给定的整型类型有符号
    make_unsigned (C++11) 使给定的整型类型无符号

    数组

    remove_extent (C++11) 从给定数组类型移除一个维度
    remove_all_extents (C++11) 移除给定数组类型的所有维度

    杂项变换

    aligned_storage 定义适于用作给定大小的类型的未初始化存储的类型

    相关文章

      网友评论

          本文标题:元编程基础(二):type_traits

          本文链接:https://www.haomeiwen.com/subject/ineeyrtx.html