C++ 具有全局成员模糊性的静态数据成员定义
当定义类的静态成员时,x是一个全局变量,同时也是类中的静态变量时,可以看到如下的模糊性C++ 具有全局成员模糊性的静态数据成员定义,c++,C++,当定义类的静态成员时,x是一个全局变量,同时也是类中的静态变量时,可以看到如下的模糊性 ambiguity.cpp using namespace std; int z = 100; int x = 100; class WithStatic { static int x; static int y; static int a; public: void print() const { cout <<
ambiguity.cpp
using namespace std;
int z = 100;
int x = 100;
class WithStatic {
static int x;
static int y;
static int a;
public:
void print() const {
cout << "WithStatic::x = " << x << endl;
cout << "WithStatic::y = " << y << endl;
cout << "WithStatic::a = " << a << endl;
}
};
int WithStatic::x = 1;
int WithStatic::y = x + 1;
int WithStatic::a= z+1;
int main() {
WithStatic ws;
ws.print();
}
我在定义y
时遇到问题。为什么不使用全局x
<代码>带有static::x。
为什么y的输出不等于101,而不是2?From
9.4静态成员[类别静态]
第3段:
静态成员可在其类别的范围内或从其类别派生的类别(第10条)的范围内直接引用;在本例中,静态成员的引用与使用限定id表达式的情况相同,限定id的嵌套名称说明符命名引用静态成员的类范围
从…起
9.4静态成员[类别静态]
第3段:
静态成员可在其类别的范围内或从其类别派生的类别(第10条)的范围内直接引用;在本例中,静态成员的引用与使用限定id表达式的情况相同,限定id的嵌套名称说明符命名引用静态成员的类范围
你怎么回事啊?如果我觉得不错的话。你的静态y应该是2,这就是你要输出的…@Developer我的问题是为什么y不等于101。我也希望是101。你有什么问题?如果我觉得不错的话。你的静态y应该是2,这就是你要输出的…@Developer我的问题是为什么y不等于101。我也希望是101。但这是如何解释歧义的呢?@Malik:是的,我也讨厌standardease。但问题的关键在于价格的意义(但是(标准中的)例子应该对那些不是标准专家的人有所帮助)。但是,从我可以读到这一点(我可能是错的):因为
Y::I
是Y
的静态成员,因此当它被初始化时,我们从Y
的范围内初始化它,并从那里进行名称查找。这意味着从该上下文中搜索g()
,因此我们(按此顺序)检查Y::g()
,::g()
(注意,我们搜索是因为我们没有直接引用它)。但这是如何解释歧义的呢?@Malik:是的,我也讨厌standardease。但问题的关键在于价格的意义(但是(标准中的)例子应该对那些不是标准专家的人有所帮助)。但是,从我可以读到这一点(我可能是错的):因为Y::I
是Y
的静态成员,因此当它被初始化时,我们从Y
的范围内初始化它,并从那里进行名称查找。这意味着从该上下文中搜索g()
,因此我们(按此顺序)检查Y::g()
,::g()
(注意,我们搜索是因为我们没有直接引用它)。
WithStatic::x = 1
WithStatic::y = 2
WithStatic::a = 101
// Example:
int g();
struct X
{
static int g();
};
struct Y : X
{
static int i;
};
int Y::i = g(); // equivalent to Y::g();