使用typename的一个说明

使用typename的一个说明

时常看到这样的代码,比如以下这两段代码:
list < int > ::iterator iter1;
list
< T > ::iterator iter1;

前者没有问题可以顺利的编译过去,但是后者时常会报一个警告,为什么呢?
原因如下:
首先,list<T>是一个模板类,在模板实例化以前是无法确定起真正的类型的,也就是说编译阶段是无法知道到底是哪个类的,那么可能出现以下一种情况:某个类中恰好有一个静态成员为iterator,此时就会出错了。
因此为了明确的指出这是一个类型而不是一个成员,我们需要在前面加上typename,也就是:
typename list < T > ::iterator iter1;
typename在这里用于说明后面紧跟着的字符串表示的是一个类型。

你可能感兴趣的:(使用typename的一个说明)