首页 > 后端开发 > C++ > C 模板中何时需要'typename”关键字?

C 模板中何时需要'typename”关键字?

Barbara Streisand
发布: 2024-12-21 01:03:10
原创
584 人浏览过

When is the

什么时候需要“typename”关键字? [重复]

考虑以下代码:

template<class K>
class C {
    struct P {};
    vector<P> vec;
    void f();
};

template<class K>
void C<K>::f() {
    typename vector<P>::iterator p = vec.begin();
}
登录后复制

为什么在此示例中需要“typename”关键字?

答案:

每当您引用嵌套名称时,“typename”关键字都是必需的模板类或函数,其中嵌套名称的类型在编译时未知。这称为“从属名称”。

在 C 中,实体分为三类:值、类型和模板。其中每一个都可以有名称,但名称本身并不表明该实体属于哪个类别。因此,编译器必须从上下文中推断实体类别。

当编译器无法推断类别时,您必须使用适当的关键字显式指定它:

  • " typename": 指定模板中的类型
  • "template": 指定模板在模板内
  • “值”:指定模板内的值(示例中未明确显示)

在提供的代码中,嵌套名称“矢量

”是模板类中的一种类型。但是,编译器无法推断这一点,因为类型参数“K”在编译时未知。因此,需要“typename”关键字来显式指定“vector

必须指定“typename”的其他情况包括:

  • 在类中声明模板别名时
  • 定义构造函数或析构函数时对于嵌套类型
  • 访问嵌套的成员函数时type
  • 使用类型作为模板参数时

以上是C 模板中何时需要'typename”关键字?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板