C++11快餐教程(1)-通过using定义类型的别名

简介: 通过using定义类型的别名

C++11快餐教程(1)-通过using定义类型的别名

在C/C++中,我们经常通过typedef来定义类型的别名。

例如:

typedef unsigned char u1;
typedef unsigned short u2;

但是,这样定义有一点不好,新定义的别名是放在后面的。一般我们都是通过别名找原名,从后往前找还是不方便的。
那么,我们把别名定义在前面好不好?

using u4 = uint32_t;
using u8 = uint64_t;

在C++11中,using不再只是用于using namespace啦,从此在别名领域大显身手。

using用来定义别名,特别适用于在模板的情况下:
下面的例子来源于ART中的容器类型的定义:

template <typename T>
using ArenaDeque = std::deque<T, ArenaAllocatorAdapter<T>>;

template <typename T>
using ArenaQueue = std::queue<T, ArenaDeque<T>>;

template <typename T>
using ArenaVector = std::vector<T, ArenaAllocatorAdapter<T>>;

template <typename T, typename Comparator = std::less<T>>
using ArenaSet = std::set<T, Comparator, ArenaAllocatorAdapter<T>>;

template <typename K, typename V, typename Comparator = std::less<K>>
using ArenaSafeMap =
    SafeMap<K, V, Comparator, ArenaAllocatorAdapter<std::pair<**const** K, V>>>;

有了上面的定义之后,我们的封装后的类型就可以泛型使用了:

ArenaVector<MIRLocation> method_stack_;        // Include stack

这是typedef无法实现的哦。

小结一下:

  • C++11中的using关键字可以实现typedef的功能,而using的定义顺序有利于查找
  • using在模板类型的别名定义比typedef要有效
目录
相关文章
|
13天前
|
编译器 开发工具 C++
Dev-C++详细安装教程及中文设置(附带安装包链接)
Dev-C++详细安装教程及中文设置(附带安装包链接)
32 0
|
14天前
|
编译器 C语言 C++
C++命名空间的using声明
C++命名空间的using声明
11 0
|
29天前
|
存储 C++ 容器
学会在 C++ 中使用变量:从定义到实践
C++中的变量是数据容器,包括`int`、`double`、`char`、`string`和`bool`等类型。声明变量时指定类型和名称,如`int myNum = 15;`。`cout`与`&lt;&lt;`用于显示变量值。常量用`const`声明,值不可变。变量名应唯一,遵循特定命名规则,常量声明时需立即赋值。
113 1
|
29天前
|
算法 程序员 C语言
【C++ 随机数分布类型 】深入探索C++随机数分布:原理、应用与实践(二)
【C++ 随机数分布类型 】深入探索C++随机数分布:原理、应用与实践
54 0
【C++ 随机数分布类型 】深入探索C++随机数分布:原理、应用与实践(二)
|
29天前
|
程序员 API 数据库
【Cmake工程 库相关教程 】深入理解CMake工程C/C++ 库管理技巧
【Cmake工程 库相关教程 】深入理解CMake工程C/C++ 库管理技巧
60 0
|
28天前
|
Java 程序员 Maven
【C/C++ CommonAPI入门篇】深入浅出:CommonAPI C++ D-Bus Tools 完全使用教程指南
【C/C++ CommonAPI入门篇】深入浅出:CommonAPI C++ D-Bus Tools 完全使用教程指南
58 0
|
29天前
|
算法 编译器 数据库
【C++ 泛型编程 高级篇】使用SFINAE和if constexpr灵活处理类型进行条件编译
【C++ 泛型编程 高级篇】使用SFINAE和if constexpr灵活处理类型进行条件编译
245 0
|
29天前
|
机器学习/深度学习 算法 编译器
【C++ 泛型编程 中级篇】深度解析C++:类型模板参数与非类型模板参数
【C++ 泛型编程 中级篇】深度解析C++:类型模板参数与非类型模板参数
47 0
|
29天前
|
设计模式 程序员 C++
【C++ 泛型编程 高级篇】C++模板元编程:使用模板特化 灵活提取嵌套类型与多容器兼容性
【C++ 泛型编程 高级篇】C++模板元编程:使用模板特化 灵活提取嵌套类型与多容器兼容性
257 2
|
27天前
|
存储 编译器 C语言
【C++练级之路】【Lv.2】类和对象(上)(类的定义,访问限定符,类的作用域,类的实例化,类的对象大小,this指针)
【C++练级之路】【Lv.2】类和对象(上)(类的定义,访问限定符,类的作用域,类的实例化,类的对象大小,this指针)

热门文章

最新文章