【问题标题】:What are tag name spaces?什么是标签名称空间?
【发布时间】:2016-09-18 06:28:40
【问题描述】:

C 标准说:

7.1.3 保留标识符
所有以下划线开头的标识符始终保留用作普通和标记名称空间中具有文件范围的标识符。

什么是“标签命名空间”?

以下是标记的名称空间吗?

struct T{};

它只是结构的类型名称吗?
这个术语会延续到 C++ 中吗?

【问题讨论】:

  • 6.2.3 谈“标签命名空间”
  • 这些是“普通”命名空间和“标签名称”命名空间(struct T {} 中的 T 是一个“标签名称”)。 C++ 没有“标签名”。

标签: c struct language-lawyer terminology


【解决方案1】:

这个术语会延续到 C++ 中吗?

没有。 C++ 标准中没有提到“标签名称”,除了在信息性附件C++ and ISO C 中,标签名称在 C 的上下文中进行了讨论。

【讨论】:

    【解决方案2】:

    来自cppreference

    如果同一标识符属于不同的类别(称为命名空间),C 允许同时在作用域内声明多个相同标识符:

    1. 标签名称空间:所有声明为标签的标识符。
    2. 标记名称:所有声明为结构、联合和枚举类型名称的标识符。请注意,所有三种标签共享一个名称空间。
    3. 成员名称:声明为任何一个结构或联合成员的所有标识符。每个结构体和联合体都引入了自己的此类命名空间。
    4. 所有其他标识符,称为普通标识符以区别于 (1-3)(函数名称、对象名称、typedef 名称、枚举常量)。

    所以,T 是一个结构的名称,与其他“标签”在同一个命名空间中,但与标签不在同一个命名空间中。即,您可以在同一范围内拥有一个名为 T 的标签。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-02-08
      • 1970-01-01
      • 1970-01-01
      • 2012-06-07
      • 2011-06-11
      • 1970-01-01
      • 2023-02-22
      • 2016-02-24
      相关资源
      最近更新 更多