zoukankan      html  css  js  c++  java
  • 条款42:了解typename的双重意义

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

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

    2、几个重要的概念

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

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

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

    4、两个特殊情况

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

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

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

  • 相关阅读:
    PHP联接MySQL
    PHP分页及原理
    两种ajax的方法
    Mysql 数据库 操作语句
    HTTP状态码对照表 HTTP response codes
    HTTP请求中POST与GET的区别
    Django模板导入和替换、以及对数据库的增加、查看
    Django模板(filter过滤器{{ }}与tag标签{% %}应用)
    Django视图层
    Diango路由控制
  • 原文地址:https://www.cnblogs.com/lasnitch/p/12256286.html
Copyright © 2011-2022 走看看