- 论坛徽章:
- 0
|
我把typename在模板中的用法看了一看,是这样的:
当我这样使用:
- #include <iostream>
- #include <list>
- int main()
- {
- int array[9] = {0};
- std::list<int> list(array, array + 9);
- std::list<int>::iterator iter1 = list.begin(), iter2 = list.end();
- for (; iter1 != iter2; iter1++)
- {
- std::cout << *iter1 << std::endl;
- }
- return 0;
- }
复制代码
这个时候,模板已经被实例化为int类型的,这个实力中有一个类型iterator.OK,这个没有问题,没有警告直接通过.
但是,如果是这样写:
std::list<T>::iterator,编译器到实例化之前不知道具体实例化的哪个实例,假设有可能std::list<char>类型中正好有一个静态成员是iterator,那么这个就是错误的.
为了明确的告诉编译器iterator,是一个类型而不是成员的名字,我们需要在前面加上typename. |
|