C++ typename
参考: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相关推荐
- C++中模板template typename T
template <typename Dtype>. 网上解释的非常多,觉得比较啰嗦,其实就是一个类型模板. 比如我们要计算两个数的加法,针对不同类型可能需要设计不同类型的函数,那么tem ...
- 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 ...
- 转载模板声明中template typename T和template class T
原文地址http://blog.csdn.net/bug07250432/article/details/10150625 在c++Template中很多地方都用到了typename与class这两个 ...
- C++知识点61——typename与class、模板编程与继承、模板类和友元、类模板与static成员
一.typename与class的异同 1.啥时候既可以使用typename,又可以使用class? 当表示模板参数的时候,二者没有区别 2.啥时候只能使用typename,不能使用class? 当模 ...
- C++ STL中常见的typename关键字的作用
在c++Template中很多地方都用到了typename与class这两个关键字,而且好像可以替换,是不是这两个关键字完全一样呢? 相信学习C++的人对class这个关键字都非常明白,class用于 ...
- 类型名称了解typename的双重意义
这段时间一直在查找类型名称之类的问题,今天正好有机会和大家共享一下. 先来看上面一个问题: 在template声明中,使用class和typename有什么不同? template<class ...
- opencv C++ 三重for循环遍历RGB图像像素(逐像素操作、操作像素值、遍历像素遍历)at<typename>(i,j)、灰度图at<uchar>、at<Vec3b>、at<Vec3F>
示例:数组遍历法at<typename>(i,j) -- 其中一种方法(速度可能并不是很快),如果对速度有要求可查看参考文章2里的其他方法 #include <opencv2/ope ...
- 使用Template时 typename 关键字的用法
以下面这个简单的程序为例 #include <iostream>template<class CONTAINER> struct EST_TTI_Entry {float t; ...
- 【C++】typename
参考<Effective C++>条款42:Understand the two meaning of typename Table of Contents 1 模板参数列表中与class ...
- C++之typename
1.typename和class 在模板前,typename和class没有区别 template<typename T> class A; template<class T> ...
最新文章
- c++用一级运算比较大小_阿里百度腾讯 C/C++ 面试题总结,我全都告诉你!
- 减少过敏反应的生活细节
- zabbix应用之短信报警
- 2021暑假每日一题 【week2 完结】
- 【PAT乙级】1067 试密码 (20 分)
- 【视频】谷歌大佬30分钟让你入门机器学习(2019谷歌I/O资源分享)
- 在Docker中配置ASP.NETCore的HTTPS模式
- tdd java_Java TDD简介–第1部分
- hdu 6194 后缀数组
- html绑定带有形参的函数,C++中函数
- github怎么搜索开源的代码_5.2.PYTHON开发利器之使用VS Code+GitHub进行python开源项目开发...
- JVM性能优化之堆区域OOM问题
- opencv运行出现错误
- Coinbase在今日比特币下跌时出现宕机
- 2×3卡方检验prism_戏说卡方检验
- java能写前端么_java程序员会写前端吗
- java代码运行的三个步骤,22年最新
- 取小数点后两位(解析)
- (C语言)对称数判断
- 中国的电子商务新时代