门户网站建设使用语言,注册网站代码,wordpress本地时间,福州做网站企业关于typename与using/typedef的使用归纳
typename
其实对于typename.在以前的编程中并没有typename这个关键字的#xff0c;在以前我们写模板时#xff0c;使用的
都是class这个关键字
template class T
void swap(T x, T y)
{int temp;temp x;x y;y…关于typename与using/typedef的使用归纳
typename
其实对于typename.在以前的编程中并没有typename这个关键字的在以前我们写模板时使用的
都是class这个关键字
template class T
void swap(T x, T y)
{int temp;temp x;x y;y temp;
}在编译器中我们使用这个写法也能通过编译
在当时创造者为 了省掉不必要的关键字所以给了calss这么多的特性
那为啥calss不用了而加入了typename呢
对于我们的写的类,对于我们类成员外部引用常用的就是这三种我们常常使用类名::静态成员变量名
struct Myclass
{
static int A; //静态数据成员
static int B(); //静态函数成员
typedef int C; //嵌套类型
}在针对下面的这中情况
templateclass T
void foo()
{
T::iterator * iter;
}我们会发现这里的语义发生歧义了。如果T::iterator表示静态数据成员那么这里表示的是两数相乘如果这里的T::iterator表示嵌套类型假设是针对与int 的重命名C 那么这里的语句就变成了声明一个名为iter的int指针。这样编译器就不知道具体你想要表示的啥。
后面就出现了tpyename来进行区分
typename这个关键字用于指出模板声明或定义中的非独立名称dependent names是类型名而非变量名
也就是说c直接给我我们一个关键字专门来处理类型名与变量名的歧义问题使用了typename的作用就是明确的告知编译器这里的是类型名而没有歧义。
所以现在的模板我们都是采用的这种写法。
template typename T
void swap(T x, T y)
{int temp;temp x;x y;y temp;
}对于using与typedef的使用
using
1、使用命名空间
我们写代码会这样使用
#includeiostream
using namespase std;
int main()
{..............return 0;
} using的用途就是导入我们的命名空间像这里就是将我们的std命名空间导入到我们的代码中这样我们在调用std命名空间中的东西就不用写std::了直接使用即可。
2、定义别名
对于定义别名我们或许很快能想到typedef对我们的名称进行取别名
对于typedef的使用
typedef myint int;using也有对数据取别名的作用其语法为
using myint int;在一般的使用上using与typedef并没有很大的区别
但是对于定义别名上 typename 不支持给模板定义别名而可以通过使用 using 来为一个模板定义别名
template typename T
using mymap mapint, T;在模板中我们常常见到使用using来对数据进行取别名一般情况下对我们常常见到使用typedef来对其取别名。
参考
C类的成员 - LubinLew - 博客园 (cnblogs.com)
Ctypename的由来和用法 - 知乎 (zhihu.com)
C typedef typename知识点总结 - 知乎 (zhihu.com)