syk*_*yko 21 c++ static static-members
我有以下示例代码:
class A {
public:
static int a;
};
int A::a = 0;
class B {
public:
static A a1;
};
A B::a1;
class C {
public:
static A a1;
};
A C::a1;
int main(int argc, const char * argv[]) {
C::a1.a++;
B::a1.a++;
std::cout << B::a1.a << " " << C::a1.a << std::endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
B类和C类将A类作为静态成员变量.
我希望程序打印"1 1",但它打印"2 2".
如果多个类有一个共同的静态变量,它们是否共享(在同一范围内?)
krz*_*zaq 19
你不是在这里看多个班级.这两个B::a1和C::a1的类型A.并且A有一个静态变量a,您访问了两次.如果你也写了A::a++,你的程序就会打印出来3 3
要稍微修改您的示例:
struct A
{
static int a;
int b;
};
int A::a;
struct B
{
static A a1;
};
A B::a1{0};
struct C
{
static A a2;
};
A C::a2{0};
Run Code Online (Sandbox Code Playgroud)
和用户代码:
B::a1.a = 1; // A's static variable changed
B::a1.b = 2; // B's A's b changed to 2
cout << B::a1.a << ", " << B::a1.b << endl;
cout << C::a2.a << ", " << C::a2.b << endl;
Run Code Online (Sandbox Code Playgroud)
它将打印:
1, 2
1, 0
Run Code Online (Sandbox Code Playgroud)
那是因为所有人A分享a,但所有人都A拥有自己的分享b.两者C并B有自己的A(他们自己的类型的对象之间分别份额)