模板名和模板id的区别

模板名和模板id的区别

声明符id是在简单声明("type name;")中指定名称的语法元素。在下面的"A“和"B::C”中,声明符-id

代码语言:javascript运行复制int A;

int B::C;

int A();

int *A;

int A[42];

template void A();在语法上,类型id基本上是一个简单的声明,其中缺少声明符id。在模板类型参数和强制转换中,类型id用作语法元素。

代码语言:javascript运行复制int // type-id

int* // type-id

int[] // type-id

int() // type-id

int(*)() // type-id模板名是模板的名称。从语法上讲,它出现在模板参数列表的前面。上面的引号误用了“模板名称”和“声明者id”,因为模板名是一个普通的标识符,不包含任何限定符。C++0x已将文本更改为

在函数模板声明中,声明符id的最后一个组件应该是模板名称或运算符函数id(即,不是模板id)。

(最后一部分出现在operator+()这样的例子中)。甚至C++0x文本也漏掉了一些案例--参见这份缺陷报告。

错误的“声明者-id”发生在说明中。这张便条被C++0x替换为

注意:在类模板声明中,如果类名是.-结束注释

在类模板声明中,在语法上指定的名称是类名称,而不是声明符id。类名和声明符id的关系如下(非常简化.)

代码语言:javascript运行复制class class-name { ... } declarator-id;

class foo { ... } bar;在类模板声明中,可能没有指定声明符id。

模板id是模板名称,后面是模板参数列表。

引号意味着在函数模板声明中,名称不能是模板id。在您的示例中,您声明了一个函数而不是一个模板。但是,仍然存在显式专门化声明模板的情况。但是,这种情况只能发生在成员函数模板上。

代码语言:javascript运行复制template

struct A {

template

void f();

};

// this explicit specialization *contains* a template declaration and

// declares an identifier (a template-name) qualified by A::

template<> template

void A::f() { }

相关推荐

步步高升是什么生肖
365bet亚洲最大网投

步步高升是什么生肖

⌛ 07-11 👁️ 2443
郇瑾名字打分、郇瑾姓名免费测试、生辰八字、五格分析、名字寓意
酒店录像要求保存多久
365bet亚洲最大网投

酒店录像要求保存多久

⌛ 07-08 👁️ 6643
为什么连接到WiFi却说网络连接超时?该怎么处理?
365bet亚洲最大网投

为什么连接到WiFi却说网络连接超时?该怎么处理?

⌛ 07-06 👁️ 157
请放下手机!世界卫生组织提醒:沉迷手机严重危害身心健康
头号玩家
彩票365

头号玩家

⌛ 07-08 👁️ 3765
居然内置3块电池,看工程师如何突破智能眼镜续航瓶颈
双色球开奖直播是在中央几台?彩票在哪个电视台播放?
一个日一个华是什么字
彩票365

一个日一个华是什么字

⌛ 07-12 👁️ 6378