C ++ - 组合typedef和typename的语句的含义

时间:2013-08-22 15:56:06

标签: c++ typedef typename

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

typedef typename _Mybase::value_type value_type;

现在,据我所知,引用Schildt撰写的« C ++完整参考»。 typename可以用关键字类代替,typename的第二个用途是通知编译器模板声明中使用的名称是类型名称而不是对象名称。

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

但是,您能否准确解释上述代码行的含义,其中typedeftypename组合在一起。声明中的“::”意味着什么?

2 个答案:

答案 0 :(得分:48)

typedef定义了一个在代码中使用的新类型,如速记。

typedef typename _MyBase::value_type value_type;
value_type v;
//use v

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

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

答案 1 :(得分:3)

typename表示_Mybase::value_type是类型的名称,因此typedef可以解决这个问题。