1
1
[dcl.type]/3 应该这样说:
你说得对:
这个
C++ grammar
使用
类型说明符seq
和
decl说明符序列
[dcl类型]/3
定义类型说明符
那不是一个好主意
cv限定符
排除构造函数、析构函数和转换函数的原因是,尽管它们可能没有 实际上,他们可能会使用 decl类型说明符 不包含任何 定义类型说明符 . 例如,在
唯一的说明符是
(但是,在查看时,我发现了另一个不应该应用规则的上下文:lambda表达式允许可选的
decl说明符序列
decl说明符序列 在一个 简单声明 已从可选更改为必需。一种新的语法符号 nodeclspec函数声明 是为了涵盖友元声明和模板相关声明的情况,这些声明声明构造函数、析构函数或转换函数没有初始说明符,也没有定义它们。构造函数、析构函数和转换函数的其他声明实际上包含在 会员声明 ,仍使用可选 decl说明符序列 ,所以 没有影响他们。
形成实际需求[dcl类型]句子排除了转换函数的 decl类型说明符seq 转换函数可以声明为:
A
nodeclspec函数声明
decl说明符序列
(必需或可选)后跟
或者一个
列表初始声明器
. 正如你所说的
因为转换函数包含
或
在
你注意到的问题是[dcl类型]/3也意味着技术上不适用于 类型说明符seq [dcl.pre]/4 清除声明中有关语法符号的许多类似语句,但不适用于本例,因为不涉及中间作用域) 转换类型id ". 但如果这条规则能被采纳就更好了[dcl类型]/3适用于此 类型说明符seq 就像大多数人一样。 |
2
2
函数声明 必须 有一个 定义类型说明符 简单地说,函数声明必须具有以下形式:
不能是这样的:
引用的规则来自 dcl.fct : (尽管有类似的术语)。它只是意味着你不能 函数声明中的类型。
因此,这与问题开头引用的例外情况并不冲突。 |
Robert E. Brown · 嵌套类的嵌套类的访问权限 6 年前 |
YSC · 通过成员指针访问受保护的成员:这是黑客行为吗? 6 年前 |
Swift - Friday Pie · 交换数学运算的阶 6 年前 |
Acorn · Linux内核的\uu is\u constexpr宏 6 年前 |
Acorn · 检测宏中的整数常量表达式 6 年前 |
Petr Skocik · 兼容类型并忽略C类型系统中的顶级限定符 6 年前 |