跟我学c++初级篇——别名的使用
一、别名aliases
别名,好理解就是另外一个名字。其实说白了,有点类似于笔名、小名等,反正都是指的同一个事物。别名的用意在编程里非常简单,就是为了方便好记。举一个例子,一个变量从属于某个类,这个类又属于某个空间,这个空间
又属于另外一个空间,那好,这个名字如果被外部调用,可以想想得有多长。如果再有类似的空间名,恰好这个空间里又一个相同的名字的变量,可以想见,出错的概率增大多少。
在c++中,变量、类型、函数和模板都可以使用别名;类和名空间也可以使用别名。别名就是为了省略编写代码的量,减轻重复代码的录入,提高辨识度。
二、别名的方法
1、使用define
这个比较简单,形如:
#define aliases name
2、typedef
它和上面的似乎有点相反:
#typedef name aliases
3、using
using 标识符 属性(可选) = 类型标识 ;
template < 模板形参列表 >
using 标识符 属性(可选) = 类型标识 ;
4、直接定义
namespace 别名 = 命名空间名; (1)
namespace 别名 = ::命名空间名; (2)
namespace 别名 = 嵌套名::命名空间名; (3)
三、源码实例
1、变量类型别名
变量的别名可以使用宏定义#define 和 typedef来实现,也可以用c++11中的using来实现。变量别名一般用在固定的值,比如圆周率、常数等的有意义命名;其它项目中的相关变量引用重命名;过长变量或者容易混淆的变量的重命名
等。说的直白一些,只要愿意在代码中就可以对相关变量进行别名设置:
#define PI 3.14
typedef unsigned logn ulongusing myPtr = int *;
2、函数别名
函数别名也是类似于类型变量的别名,特别是在使用函数指针时:
typedef int (*FUNC)(int x,int y);
using FUNC = int (int x, int y);
3、模板别名
模板的别名有两种情况,一种是正常的模板别名,一种是特化情况下的别名:
//普通使用
template<class T>
struct Alloc { };
template<class T>
using Vec = vector<T, Alloc<T>>; // 类型标识为 vector<T, Alloc<T>>
Vec<int> v;//特化
// 用于隐藏模板形参的别名模版
template<class CharT>
using mystring = std::basic_string<CharT, std::char_traits<CharT>>;
mystring<char> str;//c++20
template <class T>
using A = decltype([] { }); // A<int> 与 A<char> 指代不同的闭包类型
4、名空间别名
名空间别名可以直接定义:
namespace fbz = foo::bar::baz;
下面看一个整体的例子,通过例程更容易理解:
#include <iostream>
#include <map>
#include <string>
#include <vector>#define PI 3.14
typedef char Name[10];
Name _name;using myvec = std::vector<int>;template <typename T>
using iMap = std::map<int, T>;//下面是函数类型的例子,函数指针的例程请自己对比分析
typedef int FUNC(int a, int b);using FUNC0 = double(*)(double a, double b);int Mul(int a, int b)
{return a * b;
}double Add(double a, double b)
{return a * b;
}namespace d {namespace d0 {namespace d1 {int ddd = 36;}}
}
namespace d3 = d::d0::d1;int main()
{myvec vec(10);for (int i = 0; i < 10; i++){_name[i] = i;vec[i] = i + 1;}iMap<std::string> kv;kv[0] = "success";std::cout << "key 0 value is:" << kv[0] << std::endl;FUNC* myfunc = Mul;int r = myfunc(2,3);std::cout << "FUNC " << r << std::endl;FUNC0 myfunc0 = Add;float fr = myfunc0(PI,4.00);std::cout << "FUNC0 " << fr << std::endl;std::cout << "FUNC namespae " << myfunc(1, d3::ddd) << std::endl;return 0;
}
运行结果为:
key 0 value is:success
FUNC 6
FUNC0 12.56
FUNC namespae 36
当然,上面的例子还是不太全面,比如typedef的用法就还有不少,举一反三,可以去更多的资料来查看,这里算是一个抛砖引玉的动作吧。
三、总结
好多技术点看起来非常简单,遇到也觉得没有什么。但是,如果想把它们全都总结出来,发现还真是挺费精神。如果有一些简单的知识点组合起来使用,可能会更让人感觉到明明认识,大概也知道什么意思,可是为什么从来没
见过用过呢?这就需要不断的跟进技术标准的迭代并不断的多看别人的代码。人在发展到一定阶段后,就会产生信息蚕茧,不愿意或者无意识的封闭在这个信息空间里。
要善于打开视野,不断开拓进取。睁眼看世界,认真写代码。
跟我学c++初级篇——别名的使用相关推荐
- EntityFramework Core 3.x初级篇发布
之前陆陆续续有一些童鞋一直催我什么时候出EF Core视频,因个人时间确实有限,中间也一直有想法去录制,但是还是因为各种原因而难产,刚好最近因为疫情的事情,个人时间比较充裕,于是下定决心开始准备录制E ...
- Redis从入门到精通:初级篇(转)
原文链接:http://www.cnblogs.com/xrq730/p/8890896.html,转载请注明出处,谢谢 Redis从入门到精通:初级篇 平时陆陆续续看了不少Redis的文章了,工作中 ...
- 视频教程-微信小程序开发【初级篇 / 附案例】-微信开发
微信小程序开发[初级篇 / 附案例] 北风网讲师!瓢城Web俱乐部创始人,教学总监! 李炎恢 ¥129.00 立即订阅 扫码下载「CSDN程序员学院APP」,1000+技术好课免费看 APP订阅课程, ...
- 《Unity Shader入门精要》笔记:初级篇(1)
本篇博客主要为个人学习所编写读书笔记,不用于任何商业用途,以及不允许任何人以任何形式进行转载. 本篇博客会补充一些扩展内容(例如其他博客链接). 本篇博客还会提供一些边读边做的效果截图.文章内所有数学 ...
- Java工程师学习指南(初级篇)
Java工程师学习指南 初级篇 最近有很多小伙伴来问我,Java小白如何入门,如何安排学习路线,每一步应该怎么走比较好.原本我以为之前的几篇文章已经可以解决大家的问题了,其实不然,因为我之前写的文章都 ...
- 根本停不下来其一!通过打游戏来学习Ruby语言 -- Ruby Warrior -- 初级篇
安家博客园的第一篇随笔. 就来一点有(keng)趣(die)的吧... :) 博文初衷:探索和讨论编程的乐趣和美感 说在前面的话: 从学习编程来讲,我一直认为探索式学习是最有趣,也是最有效的一种. 而 ...
- 深度优先搜索_0基础学算法 搜索篇第一讲 深度优先搜索
0基础学算法 搜索篇第一讲 深度优先搜索 相信绝大多数人对于深度优先搜索和广度优先搜索是不会特别陌生的,如果我这样说似乎你没听说过,那如果我说dfs和bfs呢?先不说是否学习过它们,至少它们的大名应该 ...
- 学Redis这篇就够了!
作者:王爷科技 https://www.toutiao.com/i6713520017595433485 Redis 简介 & 优势 Redis 数据类型 发布订阅 订阅者的客户端显示如下 事 ...
- osg中运用Shader(osg初级篇2)
关于shader的概念,可以参见我的另一篇博客<opengl版本发展史及各种概念的厘清>,这里列举一个例子,用来实现一个特效,屏幕的左半部显示为红色.首先我们准备好两个shader程序: ...
最新文章
- 周围剃光头顶留长发型_2021年发型预测:这5位中长发男神,谁才是你心中的长发代表...
- java编程笔记8 面向对象三 内部类
- (转载)IIS安装配置全过程
- 2020年智能车竞赛暑期工作计划一览表各
- Hive客户端secureCRT中文显示设置
- office word 开发
- 约瑟夫环问题之猴子选大王
- SAP CRM OData实现:get_expanded_entityset方法,我测试时没有被调用,但是Li K电脑上调用了
- TRAC 整合已有的SVN目录
- C#.NET 大型企业信息化系统集成快速开发平台 4.2 版本 - 所有的基础数据都可以恢复删除...
- 深入浅出MFC.pdf
- 根据边界坐标提取边界内部数据点坐标
- 国内信号处理类EI期刊
- 51单片机(流水灯)
- postman设置域名_Postman中文文档——设置
- java中输入密码为星号_怎么用c语言把输入的密码变成星号
- ibm服务器前面板显示屏,ibm_x3500服务器前面板指示灯的含义.doc
- 锐龙cpu能装linux吗,AMD CPU怎么安装?AMD锐龙处理器与主板安装图解教程
- 接触【专利写作】的必备知识(包含少部分撰写技巧)
- 实验内容:编写程序,模拟抓狐狸小游戏。假设一共有一排5个洞口,小狐狸最开始的时候在其中一个洞口,然后玩家随机打开一个洞口,如果里面有狐狸就抓到了。如果洞口里没有狐狸就第二天再来抓,但是第二天狐狸会在
热门文章
- 中规中矩的Spring事件监听
- 我们无法创建新分区。【错误:0x80042468】
- mapbox-gl开发:deck.gl轨迹图效果
- hiveserver2 和beeline_Beeline连接Hiveserver2错误
- html 游戏引擎 白鹭,HTML5游戏性能大幅提升 白鹭Egret Engine 1.5震撼发布
- 隐藏服务器header与web软件版本信息
- zblog asp php,ZBlog你选择PHP还是ASP?
- 医用电气设备中关于电源开关的符号使用要求探讨
- 计算机专业考研要分最低的院校,计算机考研院校难度排行榜
- 台式计算机如何升级,老电脑如何升级 老电脑升级方法【详细介绍】