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++却支持。

  • 相关阅读:
    点击按钮,显示隐藏内容,点击隐藏内容,内容隐藏
    点击按钮,显示隐藏内容,再次点击内容,内容隐藏
    padding值
    文字竖行显示并且逐字出现
    鼠标放上去图片平滑变大效果
    animation
    transform
    Transition过度效果
    git分支操作
    超出文本用省略号代替
  • 原文地址:https://www.cnblogs.com/lasnitch/p/12256286.html
Copyright © 2011-2022 走看看