千家信息网

C++11中如何使用using

发表于:2025-11-07 作者:千家信息网编辑
千家信息网最后更新 2025年11月07日,这篇文章主要介绍了C++11中如何使用using,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。1. 定义别名在 C++ 中可以通过 t
千家信息网最后更新 2025年11月07日C++11中如何使用using

这篇文章主要介绍了C++11中如何使用using,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

1. 定义别名

在 C++ 中可以通过 typedef 重定义一个类型,语法格式如下:

typedef 旧的类型名 新的类型名;// 使用举例typedef unsigned int uint_t;

被重定义的类型并不是一个新的类型,仅仅只是原有的类型取了一个新的名字。和以前的声明语句一样,这里的声明符也可以包含类型修饰,从而也能由基本数据类型构造出复合类型来。C++11 中规定了一种新的方法,使用别名声明 (alias declaration) 来定义类型的别名,即使用 using。

在使用的时候,关键字 using 作为别名声明的开始,其后紧跟别名和等号,其作用是把等号左侧的名字规定成等号右侧类型的别名。类型别名和类型的名字等价,只要是类型的名字能出现的地方,就能使用类型别名。使用typedef定义的别名和使用using定义的别名在语义上是等效的。

使用 using 定义别名的语法格式是这样的:

using 新的类型 = 旧的类型;// 使用举例using uint_t = int;

通过 using 和 typedef 的语法格式可以看到二者的使用没有太大的区别,假设我们定义一个函数指针,using 的优势就能凸显出来了,看一下下面的例子:

// 使用typedef定义函数指针typedef int(*func_ptr)(int, double);// 使用using定义函数指针using func_ptr1 = int(*)(int, double);

如果不是特别熟悉函数指针与 typedef,第一眼很难看出 func_ptr 其实是一个别名,其本质是一个函数指针,指向的函数返回类型是 int,函数参数有两个分别是 int,double 类型。

使用 using 定义函数指针别名的写法看起来就非常直观了,把别名的名字强制分离到了左边,而把别名对应的实际类型放在了右边,比较清晰,可读性比较好。

2. 模板的别名

使用 typedef 重定义类似很方便,但是它有一点限制,比如无法重定义一个模板,比如我们需要一个固定以 int 类型为 key 的 map,它可以和很多类型的 value 值进行映射,如果使用 typedef 这样直接定义就非常麻烦:

typedef map m1;typedef map m2;typedef map m3;

在这种情况下我们就不自觉的想到了模板:

template typedef map type; // error, 语法错误

使用 typename 不支持给模板定义别名,这个简单的需求仅通过 typedef 很难办到,需要添加一个外敷类:

#include #include #include using namespace std;template // 定义外敷类struct MyMap{    typedef map type;};int main(void){    MyMap::type m;    m.insert(make_pair(1, "luffy"));    m.insert(make_pair(2, "ace"));    MyMap::type m1;    m1.insert(1, 100);    m1.insert(2, 200);    return 0;}

通过上边的例子可以直观的感觉到,需求简单但是实现起来并不容易。在 C++11 中,新增了一个特性就是可以通过使用 using 来为一个模板定义别名,对于上面的需求可以写成这样:

template using mymap = map;

完整的示例代码如下:

#include #include #include using namespace std;template using mymap = map;int main(void){    // map的value指定为string类型    mymap m;    m.insert(make_pair(1, "luffy"));    m.insert(make_pair(2, "ace"));    // map的value指定为int类型    mymap m1;    m1.insert(1, 100);    m1.insert(2, 200);    return 0;}

上面的例子中通过使用 using 给模板指定别名,就可以基于别名非常方便的给 value 指定相应的类型,这样使编写的程序变得更加灵活,看起来也更加简洁一些。

最后在强调一点:using 语法和 typedef 一样,并不会创建出新的类型,它们只是给某些类型定义了新的别名。using 相较于 typedef 的优势在于定义函数指针别名时看起来更加直观,并且可以给模板定义别名。

感谢你能够认真阅读完这篇文章,希望小编分享的"C++11中如何使用using"这篇文章对大家有帮助,同时也希望大家多多支持,关注行业资讯频道,更多相关知识等着你来学习!

类型 别名 函数 指针 模板 名字 语法 篇文章 直观 例子 格式 等号 需求 面的 优势 只是 可以通过 支持 简洁 难看 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 用户信息采集网络安全 软件开发人员心理素质 软件开发工资分析报告ppt 网络技术专业学校机构 学校网络安全课堂总结报告 软件开发流程cmmi 黑色沙漠没做完季节服务器 无线作弊防控管理服务器价格 sql数据库表怎么添加主键 数据库建立小数点类型 2008sql数据库连接失败怎么办 七日杀steam好友联机服务器终止了 微服务软件开发成本 怎样租用游戏服务器 广州计算机软件开发多少钱 模板式软件开发价格表 软件开发逻辑导图设计 服务器密码统一管理 宝山区网络技术开发优化价格 万德数据库包含信息 魔兽怀旧服散人选哪个服务器 网络爬虫数据库选择 如何有效的防止网络安全 郎溪自动化软件开发服务解决方案 苹果网络安全性在哪里打开 重庆一站式网络技术服务内容 hp服务器自检后开不了机 警电合作网络安全 西山区服务器上门回收多少钱 术士拉人密语宏如何跨服务器
0