一、class与typename的相同点

typename关键字常用于函数模板,这里首先引入函数模板的概念:函数模板代表了一个函数家族,该函数模板与类型无关,在使用时被参数化,根据实参类型产生函数的特定 类型版本

//函数模板格式
template<typename T1,typename T2,....,typename Tn>
返回值类型 函数名(参数列表){}

注意:typename是用来定义模板参数关键字,也可以使用class

//一段用于交换的函数模板
template<typename T>
void Swap( T& left, T& right)
{T temp = left;left = right;right = temp;
}

注意:在模板定义语法中关键字 class 与 typename 的作用完全一样

二、class与typename的不同点

以下面这段代码为例:实现一个vector容器的迭代器begin()功能,并函数模板的定义和实现分离

T是一个类模板的参数 是一个类型

C++语法规定 如果被视为是类型名的话 是需要用typename去声明定义的 

typename暗示着这个参数不必要是一个 class type(类类型)

如果在声明位置模板用了class 下面只要用template还是会把T强制当做类型名

声明使用用class T的话 实现要么就不写关键字 要么就得显示typename 不能显示用class

template<class T>//报错
vector<class T>::iterator vector<class T>::begin()
{return _start;
}template<typename T>//允许
vector<T>::iterator vector<class T>::begin()
{return _start;
}template<class T>//允许
vector<typename T>::iterator vector<class T>::begin()
{return _start;
}template<typename T>//允许
vector<typename T>::iterator vector<class T>::begin()
{return _start;
}

class与typename的异同相关推荐

  1. C++知识点61——typename与class、模板编程与继承、模板类和友元、类模板与static成员

    一.typename与class的异同 1.啥时候既可以使用typename,又可以使用class? 当表示模板参数的时候,二者没有区别 2.啥时候只能使用typename,不能使用class? 当模 ...

  2. C++中模板template typename T

    template <typename Dtype>. 网上解释的非常多,觉得比较啰嗦,其实就是一个类型模板. 比如我们要计算两个数的加法,针对不同类型可能需要设计不同类型的函数,那么tem ...

  3. 由MessageBox和AfxMessageBox的使用异同所感

    我记得刚开始学图形界面编程的时候,接触的最早的一个函数应该就是MessageBox,之前都一直是控制台程序,突然能运行蹦出一个对话框感觉还是很新鲜的.当时还利用MessageBox写一些恶搞程序,利用 ...

  4. ie和firefox操作table对象的异同

    2019独角兽企业重金招聘Python工程师标准>>> ie和firefox下操作table对象的异同[测试浏览器版本:ie为8,9,firefox为2.0] 1)在ie下,tabl ...

  5. 数据库和区块链的异同

    链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载. 前几日有好友询问我关于数据库和区块链的异同,我觉得这个问题非常好,今天刚好有空把当时的聊天情况回忆了一下,可能很多人都有 ...

  6. pandas中DataFrame的ix,loc,iloc索引方式的异同

    pandas中DataFrame的ix,loc,iloc索引方式的异同 1.loc: 按照标签索引,范围包括start和end 2.iloc: 在位置上进行索引,不包括end 3.ix: 先在inde ...

  7. 2分钟读懂Hadoop和Spark的异同

    谈到大数据,相信大家对Hadoop和Apache Spark这两个名字并不陌生.但我们往往对它们的理解只是提留在字面上,并没有对它们进行深入的思考,下面不妨跟我一块看下它们究竟有什么异同. 解决问题的 ...

  8. 关于commonjs,AMD,CMD之间的异同

    1.简介 随着前端业务复杂度的增加,模块化成为一个大的趋势.而在ES6还未被浏览器所支持的情况下,commonjs作为ES6中标准模块加载方案,在客服端中的支持情况并不好,现在在客服端中有2中模块化的 ...

  9. Oracle对sum求和进行if,Excel中sumif函数和sumifs函数进行条件求和的异同

    sumif函数和sumifs函数是Excel2007版本以后新增的函数,功能十分强大,实用性很强,本文介绍下Excel中通过用sumif函数和sumifs函数的条件求和的异同,并对函数进行解释,以便各 ...

最新文章

  1. c# GDI+简单绘图(二)
  2. linux 操作系统chgrp 的命令用法
  3. 开发步骤 采用restful接口开发的开发步骤
  4. sandy引擎学习笔记: 创建一个立方体
  5. linux 谷歌浏览器设置代理_linux下chrome+Proxy Switchy+ssh和firefox+autoproxy+ssh | 学步园...
  6. android安全性发展,Android未来发展 安全是重点
  7. html5仿腾讯,高仿腾讯QQ Xplan(X计划)的H5页面(1):threejs创建地球
  8. 洞泾机器人园区地址_2020年4月上海市北新泾商圈写字楼市场租赁情况
  9. C++入门系列博客二 C++ 控制流
  10. GoLang笔记—容器篇
  11. c++ 在内存中加载 exe/dll (不使用CreateProcess、LoadLibrary 等 API)
  12. 2022天府杯国际赛数学建模题目和思路
  13. UPNP端口映射简单流程
  14. Redis java如何清除缓存 redisTemplate
  15. css里dotted,CSS中dashed和dotted的区别有哪些
  16. 对区块链钱包的简单认识
  17. 【嵌入式】7段数码管引脚(2019版开发板)
  18. 计算机画图是什么软件,电脑上画图用什么软件
  19. element中组件el-autocomplete远程搜索之精确匹配和模糊匹配
  20. 计算机毕业设计ssm基于SSM框架的中医养生系统i9830系统+程序+源码+lw+远程部署

热门文章

  1. MATLAB符号运算(七)
  2. Axure 高保真 日期选择器实现 可选任意年/月/日
  3. 注册jar包为windows服务
  4. WPF中MaterialDesignThemes前端框架的使用(超详细图解步骤)
  5. Android中Uri 和Path之间的相互转化
  6. 关系代数与sql语句整理
  7. could not find java in ES_JAVA_HOME at /root/opt/elastic/elasticsearch-8.1.2/jdk/bin/java
  8. C语言实现3个数的最小公倍数和最大公约数
  9. 国产服务器飞腾/鲲鹏/龙芯下Linux(统信UOS、麒麟系统)下GB28181/Onvif/RTSP监控视频平台的部署操作
  10. php中左移和右移,c语言左移和右移的示例详解