关于typename与using typedef的使用归纳

关于typename与using/typedef的使用归纳

typename

其实对于typename.在以前的编程中并没有typename这个关键字的,在以前我们写模板时,使用的

都是class这个关键字

template <class T>
void swap(T& x, T& y)
{int temp;temp = x;x = y;y = temp;
}

在编译器中,我们使用这个写法也能通过编译

在当时创造者为 了省掉不必要的关键字,所以给了calss这么多的特性

那为啥calss不用了而加入了typename呢?

对于我们的写的类,对于我们类成员外部引用常用的就是这三种,我们常常使用类名::静态成员变量名

struct Myclass
{
static int A;  //静态数据成员
static int B(); //静态函数成员
typedef int C; //嵌套类型
}

在针对下面的这中情况

template<class T>
void foo()
{
T::iterator * iter;
}

我们会发现这里的语义发生歧义了。如果T::iterator表示静态数据成员,那么这里表示的是两数相乘,如果这里的T::iterator表示嵌套类型,(假设是针对与int 的重命名C) 那么这里的语句就变成了声明一个名为iter的int指针。这样编译器就不知道具体你想要表示的啥。

后面就出现了tpyename来进行区分

typename这个关键字用于指出模板声明(或定义)中的非独立名称(dependent names)是类型名,而非变量名:

也就是说,c++直接给我我们一个关键字,专门来处理类型名与变量名的歧义问题,使用了typename的作用就是明确的告知编译器,这里的是类型名,而没有歧义。

所以现在的模板,我们都是采用的这种写法。

template <typename T>
void swap(T& x, T& y)
{int temp;temp = x;x = y;y = temp;
}

对于using与typedef的使用

using

1、使用命名空间

我们写代码会这样使用

#include<iostream>
using namespase std;
int main()
{..............return 0;
} 

using的用途就是导入我们的命名空间,像这里就是将我们的std命名空间导入到我们的代码中,这样我们在调用std命名空间中的东西就不用写std::了直接使用即可。

2、定义别名

对于定义别名我们或许很快能想到typedef,对我们的名称进行取别名,

对于typedef的使用

typedef myint int;

using也有对数据取别名的作用,其语法为

using myint = int;

在一般的使用上,using与typedef并没有很大的区别

但是,对于定义别名上, typename 不支持给模板定义别名,而可以通过使用 using 来为一个模板定义别名

template <typename T>
using mymap = map<int, T>;

在模板中我们常常见到使用using来对数据进行取别名,一般情况下对我们常常见到使用typedef来对其取别名。

参考

C++类的成员 - LubinLew - 博客园 (cnblogs.com)

C++typename的由来和用法 - 知乎 (zhihu.com)

C++ typedef & typename知识点总结 - 知乎 (zhihu.com)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/197350.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JDK 历史版本下载以及指定版本应用

参考&#xff1a; 官网下载JAVA的JDK11版本&#xff08;下载、安装、配置环境变量&#xff09;_java11下载-CSDN博客 Gradle&#xff1a;执行命令时指定 JDK 版本 - 微酷网 下载 打开官网地址 Java Downloads | Oracle 当前版本在这里&#xff0c;但是我们要下载历史版本 选…

vue3 + TS 项目中使用pinia-plugin-persistedstate持久化缓存

Vue 3和Pinia是一对非常好的组合&#xff0c;可以帮助你构建现代化的Vue应用程序。而pinia-plugin-persistedstate是一个用于在Pinia存储中实现状态持久化的插件。下面我将详细介绍如何在Vue 3应用程序中使用Pinia和pinia-plugin-persistedstate模块。 首先&#xff0c;确保你…

[C++]priority_queue的介绍及模拟实现

目录 priority_queue的介绍及模拟实现&#xff1a;&#xff1a; priority_queue的介绍 priority_queue的定义方式 priority_queue各个接口的使用 堆的向上调整算法 堆的向下调整算法 仿函数 priority_queue的模拟实现 反向迭代器的底层原理 反向迭代器的模拟实现 priority_que…

SWD和JTAG

1、调试接口概念 1&#xff09;SWD&#xff1a;Serial Wire Debug&#xff0c;代表串行线调试&#xff0c;是ARM设计的协议&#xff0c;用于对其微控制器进行编程和调试。 SWD 引脚&#xff1a; SWDIO–串行数据线&#xff0c;用于数据的读出和写入SWDCLK–串行时钟线&#…

前端开发_CSS

CSS定义 层叠样式表 (Cascading Style Sheets&#xff0c;缩写为 CSS&#xff09;&#xff0c;是一种 样式表 语言&#xff0c;用来描述 HTML 文档的呈现&#xff08;美化内容&#xff09; 书写位置&#xff1a;title 标签下方添加 style 双标签&#xff0c;style 标签里面书…

编译原理Lab2-用bison完成语法分析器

HNU编译原理lab2实验–在 Lab1 已完成的 flex 词法分析器的基础上&#xff0c;进一步使用 bison 完成语法分析器。也就是补全两个文件。&#xff08;其实我也是抄的&#xff0c;什么也不会 >.>&#xff09; 本文没有添加任何图片&#xff0c;但是以复制输出的形式展现出…

内外网转换NAT

目录 分类 内核参数配置文件 SNAT 网关服务器配置 配置内网主机 配置外网主机 配置SNAT 内网主机测试 DNAT 配置网关服务器 支持的规则链&#xff1a;INPUT、OUTPUT、PREROUTING、POSTROUTING 分类 SNAT&#xff08;将外网设备共享给内网&#xff09; source NAT &a…

兔子的后院奇遇:深入了解RabbitMQ中的死信队列【RabbitMQ 四】

兔子的后院奇遇&#xff1a;深入了解RabbitMQ中的死信队列 前言第一&#xff1a;死信队列是什么1. 死信队列的基本概念:2. 死信是如何产生的:a. 消息过期:b. 消息被拒绝:c. 消息重试次数超限:d. 队列满:e. 消费者异常退出: 3. 死信队列的应用场景: 第二&#xff1a;死信队列的工…

异常与junit

异常 为了出现小错误&#xff0c;程序不会崩溃&#xff0c;而是继续执行&#xff08;写代码的逻辑错误与语法错误不是异常&#xff09;&#xff08;代码健壮性&#xff09;&#xff08;不要滥用异常处理机制&#xff09; 异常体系 Throwable类实现了Serial…

关于rocketMQ踩坑的那些事

在最近&#xff0c;我所写的这个项目需要使用到rocketMQ&#xff0c;为了图方便我便使用的是Windows版本的&#xff0c;但是在使用的过程中首先是发现无法发送消息出去&#xff0c;报错信息为 org.apache.rocketmq.client.exception.MQClientException: Send [3] times, still …

分布式搜索引擎elasticsearch(二)

1.DSL查询文档 elasticsearch的查询依然是基于JSON风格的DSL来实现的。 1.1.DSL查询分类 Elasticsearch提供了基于JSON的DSL(Domain Specific Language)来定义查询。常见的查询类型包括: 查询所有:查询出所有数据,一般测试用。例如:match_all 全文检索(full text)查…

Spring Bean的生命周期各阶段详解附源码

目录 Bean的生命周期Bean定义阶段Bean实例化阶段Bean属性注入阶段Bean初始化阶段Bean销毁阶段 Bean的生命周期 bean的生命周期&#xff0c;我们都知道大致是分为&#xff1a;bean定义&#xff0c;bean的实例化&#xff0c;bean的属性注入&#xff0c;bean的初始化以及bean的销毁…

基础课14——语音识别

ASR 是自动语音识别&#xff08;Automatic Speech Recognition&#xff09;的缩写&#xff0c;是一种将人类语音转换为文本的技术。ASR 系统可以处理实时音频流或已录制的音频文件&#xff0c;并将其转换为文本。它是一种自然语言处理技术&#xff0c;广泛应用于许多领域&#…

【EasyX 图形编程】

EasyX 图形编程 1. EasyX 图形编程 1. EasyX 图形编程 https://easyx.cn/

卷积神经网络(CNN):乳腺癌识别.ipynb

文章目录 一、前言一、设置GPU二、导入数据1. 导入数据2. 检查数据3. 配置数据集4. 数据可视化 三、构建模型四、编译五、训练模型六、评估模型1. Accuracy与Loss图2. 混淆矩阵3. 各项指标评估 一、前言 我的环境&#xff1a; 语言环境&#xff1a;Python3.6.5编译器&#xf…

抖音小店商品卡流量怎么玩?新手如何实现爆单?实操详解!

我是电商珠珠 相信各位都在网上看到过商品卡流量&#xff0c;主要由抖音商城推荐两部分组成。 而抖音平台为了鼓励商家去主推抖音商品卡流量玩法&#xff0c;还专门推出了商品卡免佣活动&#xff0c;具体的玩法我在之前的文章中分享过&#xff0c;这里就不具体说了。 想要获…

VQD视频质量诊断服务/图像质量诊断/视频流质量诊断/传统方法与深度学习结合的视频质量诊断

随着平安城市、大安防的发展&#xff0c;监控摄像机数量的不断增加&#xff0c;给监控系统的维护工作带来了新的挑战。如何及时了解前端视频设备的运行情况&#xff0c;发现故障并检测恶意遮挡与破坏的不法行为已成为视频监控系统运行的首要迫切问题。对于成千上万个监控摄像机…

TCP 半连接队列和全连接队列

在 TCP 三次握手的时候&#xff0c;Linux 内核会维护两个队列&#xff0c;分别是&#xff1a; 半连接队列&#xff0c;也称 SYN 队列&#xff1b; 全连接队列&#xff0c;也称 accept 队列&#xff1b; 服务端收到客户端发起的 SYN 请求后&#xff0c;内核会把该连接存储到半连…

Matlab中文注释在Linux中乱码解决

Linux for Matlab中文注释乱码 Linux for Matlab中文注释乱码&#xff08;亲测有效&#xff09; 中文注释乱码的原因是windows下的m文件采用的是gbk编码&#xff0c;只要将所有的m文件转成 utf8文件&#xff0c;显示就正常了 // 查看支持的语言 enca --list languages// 转化为…

java 多种验证码

java 多种验证码 1.SpringBoot 引入jar包2. java 导入jar包3. 代码4. 效果图 1.SpringBoot 引入jar包 <dependency><groupId>com.github.whvcse</groupId><artifactId>easy-captcha</artifactId><version>1.6.2</version> </dep…