繁体   English   中英

C ++中的奇怪语法

[英]Strange Syntax in C++

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

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

我想知道“<::”和“>”是什么意思?

谢谢 !

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

::是作用域解析运算符,它告诉编译器在myObject的范围内查找myStructmyObject本身位于全局范围内。

::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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM