元编程基础(二):type_traits

2022-04-29  本文已影响0人  秋冬不寒

概述

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

示例

下面我们看一段代码:

#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 定义适于用作给定大小的类型的未初始化存储的类型

上一篇下一篇

猜你喜欢

热点阅读