当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 << "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();
}
输出:
WithStatic::x = 1
WithStatic::y = 2
WithStatic::a = 101
我在定义y
时遇到问题。为什么不采用全局x
? WithStatic::x
已被采纳。
为什么y的输出不等于101,而不是2?
答案 0 :(得分:4)
第3段:
静态成员可以直接在其类的范围内或在其类中派生的类(第10条)的范围内引用;在这种情况下,静态成员被称为使用了qualified-id表达式,其中qualified-id的nested-name-specifier命名了引用静态成员的类作用域。
// Example:
int g();
struct X
{
static int g();
};
struct Y : X
{
static int i;
};
int Y::i = g(); // equivalent to Y::g();