在非限定 id 之后的静态数据成员定义中使用的名称

Posted

技术标签:

【中文标题】在非限定 id 之后的静态数据成员定义中使用的名称【英文标题】:Name used in the static data member definition after unqualified id 【发布时间】:2014-05-29 05:59:15 【问题描述】:

从秒。 N3797 的 3.4.1/13:

用于定义类 X 的静态数据成员的名称 (9.4.2) (在静态成员的限定 ID 之后)被查找为 如果该名称在 X 的成员函数中使用。

不清楚如何在数据成员的 unqualified-id 之后查找用于定义类 X 的静态数据成员的名称。我需要标准的报价。

【问题讨论】:

【参考方案1】:

所有内容都写在 9.4.2 中。引自 n3376 9.4.2/2

在命名空间范围的定义中,静态数据的名称 成员应使用 :: 运算符由其类名限定。 该 静态数据成员定义中的初始化表达式在 其类的范围 [示例:

class process 
 
   static process* run_chain; 
   static process* running; 
;

process* process::running = get_main();
process* process::run_chain = running;

类进程的静态数据成员run_chain在全局中定义 范围;符号过程 ::run_chain 指定成员 run_chain 是类进程的成员,在类的范围内 过程。 在静态数据成员定义中,初始化器 表达式引用类进程运行的静态数据成员。 —结束示例]

【讨论】:

非常感谢您的报价。但是您能否澄清以下内容:为什么禁止静态非常量成员的类内定义?给我一个相应条款的参考。

以上是关于在非限定 id 之后的静态数据成员定义中使用的名称的主要内容,如果未能解决你的问题,请参考以下文章

成员声明中不允许使用 C++ 限定名称

不合格名称何时/为啥/如何在依赖基础中查找?

C++类中的常成员和静态成员

5.7 内部类

c# 的类成员

类成员