Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/135.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 这个词的意思是什么;“最后一部分”;在§;14/2?_C++_Templates_C++11_Language Lawyer_C++14 - Fatal编程技术网

C++ 这个词的意思是什么;“最后一部分”;在§;14/2?

C++ 这个词的意思是什么;“最后一部分”;在§;14/2?,c++,templates,c++11,language-lawyer,c++14,C++,Templates,C++11,Language Lawyer,C++14,§14/2(强调地雷) 模板声明只能作为命名空间范围或类出现 范围声明。在函数模板声明中,最后 声明器id的组件不得为模板id。[注: 最后一个组件可以是标识符、运算符函数id、, 类中的转换函数id或文本运算符id 模板声明,如果类名是简单模板id,则 声明声明了一个类模板部分专门化(14.5.5)。 -[完注] 注意,声明器id在语法(N4140)中定义如下: 声明器id: …可选表达式 id表达式: 不合格id 合格id 不合格id: 标识符 操作员功能id 转换函数id 文字运算符id

§14/2(强调地雷)

模板声明只能作为命名空间范围或类出现 范围声明。在函数模板声明中,最后 声明器id的组件不得为模板id。[注: 最后一个组件可以是标识符、运算符函数id、, 类中的转换函数id或文本运算符id 模板声明,如果类名是简单模板id,则 声明声明了一个类模板部分专门化(14.5.5)。 -[完注]

注意,声明器id在语法(N4140)中定义如下:

声明器id:
…可选表达式

id表达式:
不合格id
合格id

不合格id:
标识符
操作员功能id
转换函数id
文字运算符id
~class name
~decltype说明符
模板id


假设在函数模板声明中,声明器id是标识符、运算符函数id、转换函数id或文本运算符id,那么上面的表达式“last component”是什么意思

在语法中的引用中,您省略了限定id的生成,它扩展为一系列非限定id,最后一个组件指的是这些非限定id中的最后一个

标准告诉你 函数模板声明不能以模板id结尾 与类模板的部分专业化不同

模板类A{};
模板类A{};//以简单模板id结尾
即使函数模板的限定id的某些组件可以是模板id,如

模板
结构A{
无效f();
};
模板
void A::f(){}//不能以模板id结尾

Related:限定id的最后一个组件(如果使用的话)。有趣的是,规则模板声明旁边还有一个特定的语法规则显式专门化。因此,
template void foo(){}
确实使用模板id作为声明符的最后一部分,但它不是模板声明。