繁体   English   中英

具有全局成员歧义性的静态数据成员定义

[英]Static data member definition with global member ambiguity

当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?

n4567

9.4静态成员[class.static]

第3段:

静态成员可以直接在其类的范围内引用,也可以在从其类派生的类的范围内引用(第10条); 在这种情况下,就像使用了qualified-id表达式一样引用静态成员,而qualified-id的嵌套名称说明符将引用静态成员的类范围命名为静态。

// Example:
int g();
struct X
{
    static int g();
};
struct Y : X
{
    static int i;
};
int Y::i = g(); // equivalent to Y::g();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM