关键字typename的用法
变量类型定义
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的用法相关推荐
- C++中typename的用法
1.typename的常规用法 typename在C++类模板或者函数模板中经常使用的关键字,此时作用和class相同,只是定义模板参数: 2.typename的第二个用法:修饰类型 template ...
- js之字面量、对象字面量的访问、关键字in的用法
一:字面量含义 字面量表示如何表达这个值,一般除去表达式,给变量赋值时,等号右边都可以认为是字面量. 字面量分为字符串字面量(string literal ).数组字面量(array literal) ...
- python中什么是关键字参数_如何使用python语言中函数的关键字参数的用法
一般情况下,在调用函数时,使用的是位置参数,即是按照参数的位置来传值:关键字参数是按照定义函数传入的参数名称来传值的.那么,关键字参数怎么使用? 工具/原料 python pycharm 截图工具 W ...
- C++模板中关键字typename与class的区别
C++模板中关键字typename与class的区别 一.共同点 在定义类模板或者函数模板时,typename 和 class 关键字都可以用于指定模板参数中的类型. template <typ ...
- php字面量,浅谈js之字面量、对象字面量的访问、关键字in的用法
一:字面量含义 字面量表示如何表达这个值,一般除去表达式,给变量赋值时,等号右边都可以认为是字面量. 字面量分为字符串字面量(string literal ).数组字面量(array literal) ...
- typename 的用法
Usage typename 主要有两个作用,让我们先来看看参考手册对该关键字的说明. In the template parameter list of a template declaration ...
- 模板类中 typename的用法,以及函数的定义和声明
typename 的用法: 第一种 template<typename T> 这种大家都知道, 和 template<class T> 一样,就不多讲解了 第二种: 嵌套从属名 ...
- static在c语言中的作用_C语言关键字 static 的用法
接上文:C语言的32个关键字 C语言 static 关键字的常见用法有三种: 用于局部变量的修饰符: 用于全局变量的修饰符: 用于函数的修饰符. 1.用于局部变量的修饰符 当 static 用于修饰局 ...
- C语言中的关键字“ volatile”的用法(摘)
C语言中的关键字" volatile"的用法(摘) volatile 这个ANSI C 关键字在经典的C 教程中很少提及,高层编程的人也可能永远都 不会用到,但是作为嵌入式开发者来 ...
最新文章
- 每日算法练习之下落的小球
- python使用什么格式划分语句块-python以什么划分语句块
- windows server 2008 让domain user有本地administrator权限
- 算法谜题 php,JavaScript实现N皇后问题算法谜题解答_javascript技巧
- ASP编程常用的函数function集合
- JAVA——HttpClient封装工具类
- cad小插件文字刷_文字狗最佳排版神器 小恐龙公文排版助手Office WPS插件
- 【HTML5】Web存储、通信、地理位置
- Dubbo(RPC原理、Dubbo架构负载均衡配置方式)(1)
- 1、webpack入门例子。
- swift -- 字典
- go 语言学习 1. go的特性
- 【邮件格式规则】-工作中电子邮件的使用
- onenote无法打开链接出现错误您的组织策略阻止我们为您完成此操作
- python绘图库seaborn_Python绘图库:Seaborn 介绍
- jedispool的使用
- android 在状态栏耳机图标显示图标显示图标显示图标,Android 通知栏图标
- Windows系统中文版切换英文版教程
- android studio 工作区间背景颜色设置眼睛保护色
- 关于Hantek6022BL虚拟示波器的在WIN10的安装(神坑)