C ++中的奇怪语法

时间:2013-02-27 14:47:22

标签: c++ qt syntax

最近我一直在面对编写原型的一种非常奇怪的方式:

void myProto( QList<::myObject::myStruct> myStructList );

我想知道“&lt; ::”和“&gt;”是什么是什么意思?

谢谢!

3 个答案:

答案 0 :(得分:8)

QList是一个模板,QList<Type>是该模板的特化,其实际类型为::myObject::myStruct

::是范围解析运算符,它告诉编译器在myStruct范围内查找myObject,{{1}}本身就是全局范围。

答案 1 :(得分:4)

::myObject::myStruct

表示引用位于全局范围的类(或命名空间)myStruct中定义的myObject

<>

类型进入这些括号内,它表示该类型的模板的特化。

答案 2 :(得分:0)

编译以下程序

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成员。