C++ typedef typename 作用

C++ typedef typename 作用C 的一些语法让人看着费解 其中就有 typedeftypen vectorT size typesize type


C++ typedef typename 作用

C++的一些语法让人看着费解,其中就有:

typedef typename std::vector<T>::size_type size_type;

vector::size_type

明白上述语法,首先要先看清vector::size_type的意思。参考《STL源码剖析》不难发现,其实:

template <class T,class Alloc=alloc> class vector{ public: //... typedef size_t size_type; //... };

这样就看得很清晰了,vector::size_typevector的嵌套类型定义,其实际等价于 size_t类型。
也就是说:

vector<int>::size_type ssize; //就等价于 size_t ssize;

为什么使用typename关键字

那么问题来了,为什么要加上typename关键字?

typedef std::vector<T>::size_type size_type;//why not?

实际上,模板类型在实例化之前,编译器并不知道vector<T>::size_type是什么东西,事实上一共有三种可能:

那么此时typename的作用就在此时体现出来了——定义就不再模棱两可。


总结

所以根据上述两条分析,

typedef typename std::vector<T>::size_type size_type;

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/233540.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • icem合并面网格_icem 混合网格 流沙

    icem合并面网格_icem 混合网格 流沙ICEMCFD中处理interface面_计算机软件及应用_IT/计算机_专业资料。Interface在CFD中应用得非常多,比如常见的应用MRF,SRF,MP以及滑移网格。其实在有限元计算……oaoaoaMMM使用ICEMCFD建立二维翼型流场网格rewrewrewAndrewMoandndndICEMCFD是一款专业的CFD前处…

    2022年5月26日
    75
  • 什么是JPS「建议收藏」

    Linux下安装好了jdk,输入jps时,系统提示“-bash:jps:commandnotfound”。几经查找,得知jps命令是jdk下bin目录中的一个可执行文件,但发现自己安装的jre-6u17-linux-i586.bin里面根本没有,需要安装jre-6u24-linux-i586.bin。据说在JDK1.5之后的版本里就有了这个jps,但居然在1.6_17中

    2022年4月8日
    40
  • 查看是否安装了webpack_webpack不是内部或外部命令

    查看是否安装了webpack_webpack不是内部或外部命令查看当前项目webpack版本在项目package.json中的scripts脚本命令中写入以下内容”webpack”:”webpack–version”然后打开终端在项目根路径下运行:npmrunwebpack

    2022年8月10日
    26
  • Keil 5下载安装教程以及使用教程

    Keil 5下载安装教程以及使用教程Keil5下载、安装、使用教程使用教程(以编写智能循迹避障小车为例)下载链接:https://pan.baidu.com/s/1QUnTgeWveKVK8shHEU4idA提取码:66kg(里面有安装教程)使用教程(以编写智能循迹避障小车为例)首先打开Keil5创建一个新的工程点击Project2.选择第一个new一个新的工程3.输入文件名4.下一步点击保存5.此时会出现当前界面点击小三角6.选择STC7.点击+8.选择STC12C5616AD9.

    2022年5月20日
    59
  • mycat实现读写分离_mybatis读写分离实现

    mycat实现读写分离_mybatis读写分离实现环境:四台主机,两台mysql做主从:master和slave一台mysql做测试,ip:10.30.162.142一台mycat做读写分离,ip:192.168.122.230客户端访问mycat端的虚拟数据库mycat端虚拟数据库设定如下:user:adminpassword:redhatmycat通过一个真实数据库授过权的用户来对数据库端进行数据的操作,在这个实验中这个用户为m…

    2022年10月13日
    2
  • Ubuntu安装MariaDB教程「建议收藏」

    Ubuntu安装MariaDB教程「建议收藏」一、环境服务器:Ubuntu16.04.1LTS(GUN/Linux4.4.0-91-genericx86_64)数据库版本:MariaDB10.3二、安装流程2.1进入MariaDB网站在https://downloads.mariadb.org/mariadb/repositories/#mirror=neusoft该地址中,可以查找对应系统的安装命令配置…

    2022年6月11日
    299

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号