首页 >后端开发 >C++ >什么时候需要 C `typename` 关键字?

什么时候需要 C `typename` 关键字?

Susan Sarandon
Susan Sarandon原创
2024-12-21 18:07:11797浏览

When is the C   `typename` Keyword Necessary?

什么时候需要“typename”关键字?

在 C 中,引用某个对象时需要“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();
}

名称向量

::iterator是一个依赖名称,因为它依赖于模板参数K。在编译时,编译器不知道该值K,因此它无法完全解析名称向量

::iterator。

“typename”关键字用于告诉编译器该名称vector

::iterator 是一个类型名称,即使它无法在编译时完全解析。这是必要的,因为编译器需要知道变量 p 的类型才能生成正确的代码。

还有其他情况必须指定“typename”,例如引用嵌套类型时在模板类中声明。例如,在以下代码中:

template<class T>
struct A {
    typedef typename T::type my_type;
};

名称 typename T::type 是在模板类 A 内部声明的嵌套类型名称。在编译时,编译器不知道T,因此它无法完全解析名称 typename T::type。

“typename”关键字用于告诉编译器名称 typename T::type 是一个类型名称,即使它无法在编译时完全解决。这是必要的,因为编译器需要知道变量 my_type 的类型才能生成正确的代码。

以上是什么时候需要 C `typename` 关键字?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn