zl程序教程

您现在的位置是:首页 >  后端

当前栏目

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

C++教程 类型 通过 11 定义 Using 别名
2023-09-14 09:00:25 时间
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要有效
【C/C++】用格雷戈里公式求π 输入精度e,使用格雷戈里公式(π/4​=1-1/3+1/5+...)求π的近似值,精确到最后一项的绝对值小于e。要求定义和调用函数funpi(e)求π的近似值。
lusing 刘子瑛,阿里系统框架专家。工作十余年,一直对新编程语言、新开发方法、数学与算法相关和并发等相关领域保持浓厚的兴趣。乐于通过技术分享促进新技术。