class A {};
void foo()
{
int A;
A ptr; // error: must use 'class' tag to refer to type 'A' in this scope
class A ptr; // ok
}
4.详细的类型说明符消除了对typename模板的需要:
struct A
{
class B{};
};
template <typename T = A> struct C
{
T::B y; // error: missing 'typename' prior to dependent type name 'T::B'
typename T::B x; // ok
class T::B y; // ok
};
C c;
这个东西 (
{class|struct|union|enum} имя) 被称为详细类型说明符。UInputComponent和之间class UInputComponent几乎没有区别。1.当然,如果你在它的右边
class写的不是一个类,而是另一个类型,这是一个错误。2.如果
UInputComponent还没有被声明,class UInputComponent不会报错,而是在当前类中声明类namespace(即使我们在类里面,也声明不是在里面,而是在嵌套的里面namespace)。这仅在名称不合格(不包含
::)时才有效。如果它是合格的并且这样的类还没有被声明,那就是一个错误。3.当类名与其他名称匹配时,需要详细的类型说明符:
4.详细的类型说明符消除了对
typename模板的需要:但它
typename适用于所有类型,但class仅适用于类。不要将详细的类型说明符与模板参数声明混淆:template <typename T>和之间template <class T>没有区别。