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>
没有区别。