变量类型定义

C++在泛型编程中是和class类似的用法

template <typename T>
inline T GetMax(T m, T n) { return m > n ? m : n; }

类型名指示符

告诉编译器把一个特殊的类型解释成一个类型,应该在所有编译可能错把一个type当成一个变量的地方使用typename,如果你的类型在模板参数中是有限制的,那就必须使用typename

template <typename T>
void foo(const T& t) {// 声明一个指向某个类型为T::bar的对象的指针T::bar * p;
}
struct StructWithBarAsType {typedef int bar;
};
int main() {StructWithBarAsType x;foo(x);
}

编译器不明白T::bar到底是不是“模板参数的非独立名字”,简称“非独立名字”。注意,任何含有名为“bar”的项的类T,都可以 被当作模板参数传入foo()函数,包括typedef类型、枚举类型或者变量等

C++标准规定

A name used in a template declaration or definition and that is dependent on a template-parameter is assumed not to name a type     unless the applicable name lookup finds a type name or the name is qualified by the keyword typename.
意即出现上述歧义时,编译器将自动默认bar为一个变量名,而不是类型名。所以上面例子中的代码 T::bar * p 会被解释为乘法,而不是声明p为指向T::bar类型的对象的指针(隐式条件)

因此,解决问题的最终办法,就是显式地告诉编译器,T::bar是一个类型名。这就必须用typename关键字

typename T::bar* p;

这样,编译器就确定了T::bar是一个类型名,p也就自然地被解释为指向T::bar类型的对象的指针了.

摘自原文

关键字typename的用法相关推荐

  1. C++中typename的用法

    1.typename的常规用法 typename在C++类模板或者函数模板中经常使用的关键字,此时作用和class相同,只是定义模板参数: 2.typename的第二个用法:修饰类型 template ...

  2. js之字面量、对象字面量的访问、关键字in的用法

    一:字面量含义 字面量表示如何表达这个值,一般除去表达式,给变量赋值时,等号右边都可以认为是字面量. 字面量分为字符串字面量(string literal ).数组字面量(array literal) ...

  3. python中什么是关键字参数_如何使用python语言中函数的关键字参数的用法

    一般情况下,在调用函数时,使用的是位置参数,即是按照参数的位置来传值:关键字参数是按照定义函数传入的参数名称来传值的.那么,关键字参数怎么使用? 工具/原料 python pycharm 截图工具 W ...

  4. C++模板中关键字typename与class的区别

    C++模板中关键字typename与class的区别 一.共同点 在定义类模板或者函数模板时,typename 和 class 关键字都可以用于指定模板参数中的类型. template <typ ...

  5. php字面量,浅谈js之字面量、对象字面量的访问、关键字in的用法

    一:字面量含义 字面量表示如何表达这个值,一般除去表达式,给变量赋值时,等号右边都可以认为是字面量. 字面量分为字符串字面量(string literal ).数组字面量(array literal) ...

  6. typename 的用法

    Usage typename 主要有两个作用,让我们先来看看参考手册对该关键字的说明. In the template parameter list of a template declaration ...

  7. 模板类中 typename的用法,以及函数的定义和声明

    typename 的用法: 第一种 template<typename T> 这种大家都知道, 和 template<class T> 一样,就不多讲解了 第二种: 嵌套从属名 ...

  8. static在c语言中的作用_C语言关键字 static 的用法

    接上文:C语言的32个关键字 C语言 static 关键字的常见用法有三种: 用于局部变量的修饰符: 用于全局变量的修饰符: 用于函数的修饰符. 1.用于局部变量的修饰符 当 static 用于修饰局 ...

  9. C语言中的关键字“ volatile”的用法(摘)

    C语言中的关键字" volatile"的用法(摘) volatile 这个ANSI C 关键字在经典的C 教程中很少提及,高层编程的人也可能永远都 不会用到,但是作为嵌入式开发者来 ...

最新文章

  1. 每日算法练习之下落的小球
  2. python使用什么格式划分语句块-python以什么划分语句块
  3. windows server 2008 让domain user有本地administrator权限
  4. 算法谜题 php,JavaScript实现N皇后问题算法谜题解答_javascript技巧
  5. ASP编程常用的函数function集合
  6. JAVA——HttpClient封装工具类
  7. cad小插件文字刷_文字狗最佳排版神器 小恐龙公文排版助手Office WPS插件
  8. 【HTML5】Web存储、通信、地理位置
  9. Dubbo(RPC原理、Dubbo架构负载均衡配置方式)(1)
  10. 1、webpack入门例子。
  11. swift -- 字典
  12. go 语言学习 1. go的特性
  13. 【邮件格式规则】-工作中电子邮件的使用
  14. onenote无法打开链接出现错误您的组织策略阻止我们为您完成此操作
  15. python绘图库seaborn_Python绘图库:Seaborn 介绍
  16. jedispool的使用
  17. android 在状态栏耳机图标显示图标显示图标显示图标,Android 通知栏图标
  18. Windows系统中文版切换英文版教程
  19. android studio 工作区间背景颜色设置眼睛保护色
  20. 关于Hantek6022BL虚拟示波器的在WIN10的安装(神坑)

热门文章

  1. 百度关键词排名浮动怎么办?
  2. 《打工人》关于打工人的段子合集!
  3. 打标和权重推送 搜索权重推送 曝光率 低成本利用定向推广打爆首页流量
  4. 360手机卫士会影响Widget的运行
  5. 【教学类-32-01】十二生肖1.0版(绘画+手工+排序+分类+玩牌)(中班:偏科学-数)
  6. goLang Mutex用法案例详解
  7. 视频文件采用哪种格式占的空间最小
  8. 【JZOJ B组】超氧化钾
  9. Java I/O 相关面试题
  10. hosts文件 端口_中望软件:中望3D网络版服务端如何固定端口-产经要闻