【发布时间】:2014-05-30 04:30:22
【问题描述】:
在数据成员的 quialified-id 之后,有一个引用描述的名称查找应用于 const 静态数据成员的数据成员:
秒。 3.4.1/13:
用于定义类 X 的静态数据成员的名称 (9.4.2) (在静态成员的限定 ID 之后)被查找为 如果该名称在 X 的成员函数中使用。
但是我们可以定义类内的静态常量数据成员:
class A
{
static const int i = x;//x is a name defined an arbitrary const int
};
从秒的规则。 3.4.1/13 不适用于名称x 查找。 实际会应用什么规则?请参考标准中的相应条款。
例如,下面的代码是有效的:
#include <stdio.h>
const int a=5;
class A
{
public:
static const int b=a;//b is unqualified-id of this data-member
};
int main(){ printf("%d\n",A::b); } //5
以下代码也有效:
#include <stdio.h>
class A
{
public:
static const int a=7;
static const int b=a;
};
int main(){ printf("%d\n",A::b); } //7
但以下无效:
#include <stdio.h>
class A
{
public:
static const int b=a; //error: a was not declare in this scope.
static const int a=7;
};
int main(){ printf("%d\n",A::b); }
不清楚哪些规则适用于查找a。
【问题讨论】:
-
x在您的案例中定义在哪里?显然它不能只是任何地方。 -
我不明白这个问题;您引用的文字是说查找与
void member() { x; }的查找相同。您是在问如何在成员函数中查找名称? -
@Praetorian x 在某处定义。我想了解范围的后续查找名称x。
-
@MattMcNabb No. 引用说此查找与 quailified-id 相同。但是使用静态 const 数据成员的非限定 id 查找呢?
-
您将术语合格和不合格查找与 qualified-id 混为一谈。后者在此引用中谈论的是静态数据成员标识符 (
i),当您提供定义时需要使用类名(和命名空间名称)进行限定 - 例如,const int NS::A::i;- 因此短语 qualified-id。 §3.4.1/13 是说 §3.4.1/8 下列出的规则将用于查找x。