[英]Strange Syntax in C++
最近我一直在面对编写原型的一种非常奇怪的方式:
void myProto( QList<::myObject::myStruct> myStructList );
我想知道“<::”和“>”是什么意思?
谢谢 !
QList
是一个模板, QList<Type>
是该模板的特化,实际类型为::myObject::myStruct
。
::
是作用域解析运算符,它告诉编译器在myObject
的范围内查找myStruct
, myObject
本身位于全局范围内。
::myObject::myStruct
表示在类(或命名空间) myObject
定义的myStruct
,它位于全局范围。
<>
类型在这些括号内,它表示该类型的模板的特化。
编译以下程序
struct A // GLOBAL A
{
void f()
{ }
};
namespace nm
{
struct A // nm::A
{ };
template <class T>
struct B
{
T a;
};
void f1(B<A> b) // WILL NOT COMPILE
{
b.a.f();
}
void f2(B< ::A> b) // WILL COMPILE
{
b.a.f();
}
}
int main()
{
}
nm::f1
将无法编译
nm::f2
将编译
这是因为::A
(全局A)有一个f
成员,而nm::A
没有f
成员。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.