sizeof的作用——解释类中与类之外static变量的情况
来源:互联网 发布:手机备份软件排名 编辑:程序博客网 时间:2024/04/28 12:39
今天看程序员面试宝典的时候遇到一个问题,书上有这么一句话:sizeof计算栈中分配的大小。咋一看这句话的时候,很不理解,难道像函数中类似于static、extern const类型的变量的sizeof都是0?
本着实践出真知的原则,我测试了一下:
static int s = 10;
extern const int h = 10;
void main()
{
cout << sizeof(s) <<endl<<sizeof(h)<< endl;
getchar();
}
输出结果:
4
4
结果和书上所说明显不符,再仔细看书,发现这句话的上下文是类中,确实,当sizeof计算类的大小的时候,是不考虑static这种共享成员的。
class A1
{
public:
A1():d(10){};
int a;
char c;
const int d;
static int b;
};
void main()
{
A1 x;
int *p = (int *)&(x.d);
*p = 20;
cout << sizeof(A1)<<endl;
getchar();
}
输出结果:
12
虽然书上说的是有上下文情境的,但我觉得很容易误导读者,所以,在此,我就根据资料和我自己的理解来对sizeof做个说明:
sizeof的本质是得到某个类型的大小,确切的来说就是当创建这个类型的一个对象(或变量)的时候,需要为它分配的空间的大小。而类也可以理解为类似于int、float这样的一种类型,当类中出现static成员变量的时候,static成员变量是存储在静态区当中的,它是一个共享的量,因此,在为这个类创建一个实例对象的时候,是无需再为static成员变量分配空间的,所以,这个类的实例对象所需要分配的空间是要排除static成员变量的,于是,当sizeof计算类的大小的时候会忽略static成员变量的大小。
根据上述我所提出的解释,就能说明static变量不在类中的时候,用sizeof得到的大小为什么不是0了,因为static不在类中的时候,为static类型(static int等等)定义一个变量的时候,是必须要分配空间的,所以sizeof计算得到的就是为这个类型的 变量分配的空间的大小。
如有不足,还请各位指正!
- sizeof的作用——解释类中与类之外static变量的情况
- sizeof的作用——解释类中与类之外static变量的情况
- static变量的作用
- Static变量的作用
- Static变量的作用
- C语言中static变量的作用
- static(静态)变量的作用、初始化特点以及类中静态数据成员的特点
- 静态变量static的作用
- OC中 static 与 const 的作用
- c语言中变量前的static的作用
- iOS开发中static变量的三大作用
- ios中类变量的作用范围
- iOS中 static变量与全局、局部变量的区别 !
- static修饰类的作用
- static函数或变量的的作用
- 详解C/C++语言中Static 变量 或者 static函数的作用
- php的static变量作用域
- static变量保护作用的探讨
- C++中Const说明
- 电影推荐之协同过滤
- 分享一个改进后的冒泡排序算法(C#实现)
- 类内const static(static const)成员变量初始化问题
- 【转】C数据存储(包括const存储在哪,C++不同部分我在文中用红字已指出)
- sizeof的作用——解释类中与类之外static变量的情况
- C++空类以及没有成员变量的类的大小
- Android Service 解析
- error127:The specified procedure could not be found.无法找到入口 无法定位程序输入点xxx 于动态链接库ulib.dll上
- 将博客搬至CSDN
- 分享一篇不错的博文《写给准备参加秋招的学弟学妹们~一定要来看哦~》
- Linux上的free命令详解
- [LeetCode]LRU Cache有个问题,求大神解答【已解决】
- EBJ内部参考