c++中的typename在一般情况下用于模板声明时可以用class来代替,但是这显然不是typename的真正用途所在
它的正在用途是取消二义性,比如我们用如下函数
template<typename K> void dummy(K a) { K::iteator b; }
这个代码在编译器看来是有二义性的,因为事实上如下两种K都可以适用于上面的函数
和
这样编译器就不知道你要干什么了,这个时候你的代码就必须写成如下这样:
这才表示一个变量声明,而不是一个变量
本文深入探讨了C++中typename的用途,它主要用于取消模板声明中的二义性,避免编译器在解析时产生歧义。通过实例展示了typename与class的不同使用场景,并解释了其在复杂模板设计中的重要性。
c++中的typename在一般情况下用于模板声明时可以用class来代替,但是这显然不是typename的真正用途所在
它的正在用途是取消二义性,比如我们用如下函数
template<typename K> void dummy(K a) { K::iteator b; }
这个代码在编译器看来是有二义性的,因为事实上如下两种K都可以适用于上面的函数
和
这样编译器就不知道你要干什么了,这个时候你的代码就必须写成如下这样:
这才表示一个变量声明,而不是一个变量
736

被折叠的 条评论
为什么被折叠?