关于C++:C++结合Type和Type名称的语句含义

C++ - meaning of a statement combining typedef and typename

本问题已经有最佳答案,请猛点这里访问。

在C++头文件中,我看到了这个代码:

1
typedef typename _Mybase::value_type value_type;

现在,据我所知,引述自?C++的完整引用?席尔德。typename可以用关键字类替换,typename的第二个用法是通知编译器模板声明中使用的名称是类型名而不是对象名。

同样,您可以使用关键字typedef定义新的数据类型名称。你不是实际创建新的数据类型,而不是为现有的类型。

但是,您能准确地解释一下上述代码行的含义吗,其中typedeftypename组合在一起。声明中的"EDOCX1"〔5〕意味着什么?


typedef正在定义一个新类型,以便在代码中使用,就像一个速记。

1
2
3
typedef typename _MyBase::value_type value_type;
value_type v;
//use v

这里的typename让编译器知道value_type是一个类型,而不是_MyBase内部的对象。

::是该类型的范围。有点像"在"中,所以value_type在"_MyBase"中。或者也可以被认为是包含物。


typename表示_Mybase::value_type是类型的名称,因此typedef可以根据这一事实来解释。