C++template中typename 和class有什么区别?

又是历史原因,以前是用class,后来C++ Standard 出现后,引入了typename, 所以他们是一样的。

但是,又有一些微妙的不同,因为有时候,你不得不使用typename.

  1. 在声明 template parameters(模板参数)时,class 和 typename 是可互换的。

  2. 用 typename 去标识 nested dependent type names(嵌套依赖类型名),在 base class lists(基类列表)中或在一个 member initialization list(成员初始化列表)中作为一个 base class identifier(基类标识符)时除外。

For example:

C++template中typename 和class有什么区别?C++template中typename 和class有什么区别?代码

1 using namespace std; 2 3 template <class T> int vcount(vector<T> v) { 4     int i; 5     typename vector<T>::iterator vi; 6     for(i=0,vi=v.begin(); vi!=v.end(); i++,vi++) 7     ; 8     return(i); 9 }

更详细的可以参考

http://tech.ddvip.com/2006-12/116515389312899.html

http://blogs.msdn.com/b/slippman/archive/2004/08/11/212768.aspx

原文链接: https://www.cnblogs.com/yayagamer/archive/2010/12/02/1894747.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/18178

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月7日 下午6:55
下一篇 2023年2月7日 下午6:56

相关推荐