首页 > 其他 > 详细

条款42:了解typename的双重意义

时间:2020-02-03 17:14:06      阅读:70      评论:0      收藏:0      [点我收藏+]

1、typename和class在模板的类型声明式中,二者有什么不同?

声明模板的类型参数时,二者的效果完全相同。但是在模板内,有些情况下必须使用typename。也就是说typename除了在模板的声明式中起作用,还会在模板体内起作用,这就是typename和class在全局意义上的不同之处。

2、几个重要的概念

  • 从属名称
    模板内出现的名称如果依赖于某个模板参数,这样的名称就称为从属名称。
  • 非从属名称
    模板内出现的名称如果不依赖于某个模板参数,这样的名称就称为非从属名称。
  • 嵌套从属名称
    如果模板内出现的从属名称呈嵌套状,这样的名称称之为嵌套从属名称。例如:C::const_iterator 其中C为模板参数。

    3、什么时候必须使用typename修饰?

    如果模板体内的名称为嵌套从属名称,那么定义这个名称必须使用typename修饰。但是有两个特殊情况,下面详细描述。

    4、两个特殊情况

  • 成员初值列中的名称不能使用typename修饰
  • 基类列表中的名称不能使用typename修饰

    5、关于C++看似不合理设计的一个解释

    如果嵌套从属名称的名称过长,这个时候可以使用typedef重新命名,这就解释了为什么typedef typename 这样看似不合理的并列,然而C++却支持。

条款42:了解typename的双重意义

原文:https://www.cnblogs.com/lasnitch/p/12256286.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!