C++公共变量范围混乱

Dre*_*rew 0 c++ scope global-variables public-members difference

如果在类中声明公共变量,则可以从也是该类成员的任何函数中修改该变量.

如果在函数内声明变量,则其范围不会超出函数的范围.

那么公共类变量本质上是一个全局变量,可以被类的任何成员访问和更改吗?

如果是这样的话,全局变量和公共变量之间有什么区别?

Cor*_*mer 5

您缺少的更重要的语义是类成员变量(除非它是static)特定于该类的每个实例.例如

class Foo
{
public:
    Foo() = default;
    int x;
};
Run Code Online (Sandbox Code Playgroud)

如果我要说

Foo a{};
Foo b{};

a.x = 1;
b.x = 7;

a.x != b.x;   // value is different
&a.x != &b.x  // address is different
Run Code Online (Sandbox Code Playgroud)

请注意,成员变量x具有不同的值,具有不同的地址(因为它完全不同int),并且属于每个实例Foo.

现在提一下static,请注意我不能这样做

Foo::x = 5;   // only works if x is static
Run Code Online (Sandbox Code Playgroud)

因为我需要一个实际的实例Foo用于其访问它的成员变量.相反,static成员不需要实例,并且整个类具有共享的该成员的单个实例.