您的位置:首页 > 其它

typedef typename 作用

2017-12-30 19:39 337 查看


C++ typedef typename 作用

C++的一些语法让人看着费解,其中就有:
typedef typename std::vector<T>::size_type size_type;
1

详见《C++ Primer》(第五版)P584 

有些不懂的语法有时候虽然知道大概是什么意思,忽略一下就过了其实,不过心里老是膈应,就刨根问底一次吧。


vector::size_type

明白上述语法,首先要先看清
vector::size_type
的意思。参考《STL源码剖析》不难发现,其实:
template <class T,class Alloc=alloc>
class vector{
public:
//...
typedef size_t size_type;
//...
};
1
2
3
4
5
6
7

这样就看得很清晰了,
vector::size_type
vector
的嵌套类型定义,其实际等价于 
size_t
类型。 

也就是说:
vector<int>::size_type ssize;
//就等价于
size_t ssize;
1
2
3


为什么使用typename关键字

那么问题来了,为什么要加上typename关键字?
typedef std::vector<T>::size_type size_type;//why not?
1

实际上,模板类型在实例化之前,编译器并不知道
vector<T>::size_type
是什么东西,事实上一共有三种可能:

静态数据成员 

静态成员函数 

嵌套类型

那么此时
typename
的作用就在此时体现出来了——定义就不再模棱两可。


总结

所以根据上述两条分析,
typedef typename std::vector<T>::size_type size_type;
1

语句的真是面目是: 
typedef
创建了存在类型的别名,而
typename
告诉编译器
std::vector<T>::size_type
是一个类型而不是一个成员。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: