参考:typename是怎么来的
本文测试环境:vs2019,c++ 标准:ISO c++ 14

typename通常用作模板的声明中,如下:
template<typename T>
void f1(T val){}

也可以用class说明模板类型参数
template<class T>
void f1(T val){}

class在typename这个关键字之前就已经有了,比如我们常用来定义一个类类型:
class c1{};

那么既然有了class,为什么还要有typename,有哪些地方必须写typename而不能写class呢?
template<class T>
void f1(T val)
{
T::p *p1;
}
上面是一个模板函数的定义,第一行 中class T用于说明T是一个类型,也可以用typename T;但是对于T::p * p1这条语句,应该如何解释呢?也许T是一个类类型,它有一个静态变量p,p1是一个全局变量,则这是一个乘法表达式语句。但是也可能T中的p是一个类型,则这是一个定义指针的语句。那么如何解释该语句只有在明确T的类型之后才能确定,也就是实例化模板时才能确定。这可能会造成很多潜在的bug,所以C++标准提出了typename关键字,其表明typename后面的是一个类型名字,比如typename T::p * p1;如果用class T::p * p1 则T::p必须是一个类类型,但是如果用typename T::p * p1,则T::p是一个类型即可,既可以是内置类型,也可以是类类型。比如 typename int a=1;等价于 int a=1;如果没有class 或者typename,则T::p * p1只有在实例化时才能确定该语句的确切含义,为了避免这种情况,不同的编译器采取了不同的措施:VS认为这是一个乘法表达式,即把p1作为一个已经存在的变量看待;而GNU认为这是一个定义p1是指针变量的语句;

C++ typename相关推荐

  1. C++中模板template typename T

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

  2. C++报错解决:error: ‘int’ is not a class, struct, or union type typedef typename _Sequence::value_

    我在使用C++的时候,遇到了如下报错: -> % g++ test.cpp In file included from /usr/include/c++/7/queue:64:0,from te ...

  3. 转载模板声明中template typename T和template class T

    原文地址http://blog.csdn.net/bug07250432/article/details/10150625 在c++Template中很多地方都用到了typename与class这两个 ...

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

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

  5. C++ STL中常见的typename关键字的作用

    在c++Template中很多地方都用到了typename与class这两个关键字,而且好像可以替换,是不是这两个关键字完全一样呢? 相信学习C++的人对class这个关键字都非常明白,class用于 ...

  6. 类型名称了解typename的双重意义

    这段时间一直在查找类型名称之类的问题,今天正好有机会和大家共享一下. 先来看上面一个问题: 在template声明中,使用class和typename有什么不同? template<class ...

  7. opencv C++ 三重for循环遍历RGB图像像素(逐像素操作、操作像素值、遍历像素遍历)at<typename>(i,j)、灰度图at<uchar>、at<Vec3b>、at<Vec3F>

    示例:数组遍历法at<typename>(i,j) -- 其中一种方法(速度可能并不是很快),如果对速度有要求可查看参考文章2里的其他方法 #include <opencv2/ope ...

  8. 使用Template时 typename 关键字的用法

    以下面这个简单的程序为例 #include <iostream>template<class CONTAINER> struct EST_TTI_Entry {float t; ...

  9. 【C++】typename

    参考<Effective C++>条款42:Understand the two meaning of typename Table of Contents 1 模板参数列表中与class ...

  10. C++之typename

    1.typename和class 在模板前,typename和class没有区别 template<typename T> class A; template<class T> ...

最新文章

  1. c++用一级运算比较大小_阿里百度腾讯 C/C++ 面试题总结,我全都告诉你!
  2. 减少过敏反应的生活细节
  3. zabbix应用之短信报警
  4. 2021暑假每日一题 【week2 完结】
  5. 【PAT乙级】1067 试密码 (20 分)
  6. 【视频】谷歌大佬30分钟让你入门机器学习(2019谷歌I/O资源分享)
  7. 在Docker中配置ASP.NETCore的HTTPS模式
  8. tdd java_Java TDD简介–第1部分
  9. hdu 6194 后缀数组
  10. html绑定带有形参的函数,C++中函数
  11. github怎么搜索开源的代码_5.2.PYTHON开发利器之使用VS Code+GitHub进行python开源项目开发...
  12. JVM性能优化之堆区域OOM问题
  13. opencv运行出现错误
  14. Coinbase在今日比特币下跌时出现宕机
  15. 2×3卡方检验prism_戏说卡方检验
  16. java能写前端么_java程序员会写前端吗
  17. java代码运行的三个步骤,22年最新
  18. 取小数点后两位(解析)
  19. (C语言)对称数判断
  20. 中国的电子商务新时代

热门文章

  1. window 10 删除带有管理员权限的Oracle文件夹
  2. UML各种关系,图的介绍(附加案例)
  3. 联想yoga710评测_YOGA新本性能担当 联想YOGA 710 14评测
  4. yoga14s 更新win11
  5. Adobe PR学习笔记一:从视频中剪辑一段出来和插入文字
  6. 关于RGB屏调试的一些知识
  7. android热门机型,Android手机在列 不足1K热门机型大搜索
  8. react-native 二维码扫描
  9. amber教程4.6:对体系氢键分析
  10. 《大明劫》对团队建设的启示