typename在模板中,为什么会减少歧义?
更好的使用模板
简单来说,当我们引用依赖于模板参数的名字(dependent name)时,编译器无法提前知道它是类型名还是变量名,所以必须用 typename 来显式告诉编译器它是一个类型。
例如:
1 |
|
如上的情况,因为某个变量(p)声明依赖于模板参数(T),并且没有typename
,所以编译器会将const_iterator
当作一个变量,然后和p
相乘。
解决歧义的方法
加上 typename
1 |
|
但是,不可单独只加上typedef
,这样会导致错误:
1 |
|
使用typedef
1 |
|
typename在模板中,为什么会减少歧义?
https://weihehe.top/2025/10/13/typename在模板中,为什么会减少歧义?/