#include <iostream>
using namespace std;
class MyClass
{
private:
static int x;
static int calc(int a, int b)
{
cout << "chekcing !! ";
return b * a;
}
};
int MyClass::x = 1;
int main()
{
MyClass::calc(1,2);
MyClass::x += 3;
return 0 ;
}
Run Code Online (Sandbox Code Playgroud)
问题:据我所知,静态成员不是类的一部分,那么为什么我们要检查访问说明符?
static成员在该类的所有实例之间共享.所以它们不属于一个特定的类实例,但它们属于类本身.从上面来看,访问规范规则适用于static成员是合乎逻辑的.
您的困惑源于这样一个事实:如果您使用静态成员检查类的大小,则静态成员的存在不会产生开销.这种行为是正确的.静态成员对类的大小没有贡献,但它们仍然是类的一部分,标准明确地这样说.
参考:
9.4.2静态数据成员:
§1:
静态数据成员不是类的子对象的一部分.如果声明了静态数据成员,则
thread_local每个线程有一个成员副本.如果未声明静态数据成员thread_local,则该类的所有对象共享一个数据成员副本.
| 归档时间: |
|
| 查看次数: |
70 次 |
| 最近记录: |