C++ 为什么可以';静态数据成员是否与非静态数据成员同名?

C++ 为什么可以';静态数据成员是否与非静态数据成员同名?,c++,C++,它们不能有相同的名称,因为在非静态方法中引用x时,您指的是哪一个 语言设计者可能已经决定允许它,例如,更喜欢非静态的或相反的。但就个人而言,我很高兴他们没有。他们不能有相同的名字,因为在非静态方法中引用x时,您指的是哪一个 语言设计者可能已经决定允许它,例如,更喜欢非静态的或相反的。但就个人而言,我很高兴他们没有这样做。好吧,我知道为了方便起见,我们都可以省略this指针和foo::。但这仍然很奇怪,因为它们来自两个不同的上下文。@hustxujinkang它们来自一个作用域:类作用域。我知道,

它们不能有相同的名称,因为在非静态方法中引用
x
时,您指的是哪一个


语言设计者可能已经决定允许它,例如,更喜欢非静态的或相反的。但就个人而言,我很高兴他们没有。他们不能有相同的名字,因为在非静态方法中引用
x
时,您指的是哪一个


语言设计者可能已经决定允许它,例如,更喜欢非静态的或相反的。但就个人而言,我很高兴他们没有这样做。

好吧,我知道为了方便起见,我们都可以省略this指针和foo::。但这仍然很奇怪,因为它们来自两个不同的上下文。@hustxujinkang它们来自一个作用域:类作用域。我知道,为了方便起见,我们都可以省略this指针和foo::。但这仍然很奇怪,因为它们来自两个不同的上下文。@hustxujinkang它们来自一个作用域:类作用域。同样的原则是,在同一个作用域中,不能有两个同名的变量(如果其中一个是静态的,则无关紧要)。否则,您将无法知道哪个是哪个。这个程序是不明确的。这是一个相同的原则,即一个函数中不能有两个名称相同的变量(如果其中一个是静态的,则无关紧要)。否则,你就不知道哪个是哪个。该计划将是模棱两可的。
#include<stdio.h>
#include<vector>
#include<iostream>
using namespace std;

int x = 1;
class foo
{
public:
    foo()
    {
        x = 3;
    }
    static int x;
    void bar() const
    {
        cout << x << endl;
    }
    int x;
};
int foo::x = 2;
int main()
{
    cout << "Hello, world!" << endl;
    return 0;
}
test.cc:19:9: error: ‘int foo::x’ conflicts with a previous declaration
     int x;
         ^
test.cc:14:16: note: previous declaration ‘int foo::x’
     static int x;