c++ - 我不明白 [dcl.enum]/4 与下面突出显示的“封闭枚举说明符”有关的内容
问题描述
如果一个enum-head-name包含一个nested-name-specifier,它不应以decltype-specifier开头,并且封闭的 enum-specifier或 opaque-enum-declaration 应引用先前直接在类中声明的枚举或嵌套名称说明符所引用的名称空间,或在该名称空间的内联名称空间集 ([namespace.def]) 的元素中(即,既不是继承也不是由 using 声明引入),以及枚举说明符或opaque-enum-declaration 应出现在包含先前声明的命名空间中。
我相信这一段在某种程度上与下面的简单片段有关。但我不明白上面提到的这个封闭的枚举说明符是什么。请注意,两者S::E::i
都是S::i
enum -head-name,但这两个表达式不包含enum-specifier!
#include <iostream>
struct S
{
enum E { i = 1 };
};
int main(){
std::cout << S::E::i << '\n';
std::cout << S::i << '\n';
}
此代码打印
1
1
解决方案
我相信这一段在某种程度上与下面的简单片段有关。
它与该片段无关,因为枚举说明符enum E { i = 1 }
不包含嵌套名称说明符。
请注意,两者
S::E::i
和S::i
以下都是枚举头名称
这些不是枚举头名称。enum-head-names 仅在 enum-heads 内,而 enum-heads 仅在 enum-specifiers 内。这些只是限定ID,它由一个嵌套名称说明符和一个命名枚举器的标识符组成。
一个枚举说明符的示例,其 enum-head-name 确实包含一个嵌套名称说明符,并且引用的规则适用于该说明符:
struct S
{
enum E : int;
// ^^^^^^^^^^^^ opaque-enum-declaration
};
enum S::E : int { i = 1 };
// ^^^ nested-name-specifier
// ^^^^ enum-head-name
// ^^^^^^^^^^^^^^^ enum-head
// ^^^^^^^^^^^^^^^^^^^^^^^^^ enum-specifier
推荐阅读
- python - 评估一个字符串,就好像它是通过点运算符连接的一样
- java - JAVA Android studio 安全套接字 ssl 连接到服务器套接字 ssl windows 10
- python - 表格未显示在页面中
- mysql - 检查 MySQL 服务器何时准备好运行查询而不中断它们
- python - 使用 categorical_crossentropy 时出错
- swift - 检测到参考图像时播放音频的惰性变量
- php - 无法访问 PHP-FPM 站点
- node.js - 无法获取 Dialogflow REST api 的访问令牌
- vue.js - 如何在模板内设置 bootstrap-vue 文本颜色
- javascript - 在 onclick 中使用变量(即使以后更改,也要保留旧变量值)