设为首页 加入收藏

TOP

sizeof的作用解释类中与类之外
2014-07-19 23:03:39 】 浏览:154
Tags:sizeof 作用 解释 之外

  今天看程序员面试宝典的时候遇到一个问题,书上有这么一句话:sizeof计算栈中分配的大小。咋一看这句话的时候,很不理解,难道像函数中类似于static、extern const类型的变量的sizeof都是0

  本着实践出真知的原则,我测试了一下:

  static int s = 10;

  extern const int h = 10;

  void main()

  {

  cout << sizeof(s) <

  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)<

  getchar();

  }

  输出结果:

  12  虽然书上说的是有上下文情境的,但我觉得很容易误导读者,所以,在此,我就根据资料和我自己的理解来对sizeof做个说明:

  sizeof的本质是得到某个类型的大小,确切的来说就是当创建这个类型的一个对象(或变量)的时候,需要为它分配的空间的大小。而类也可以理解为类似于int、float这样的一种类型,当类中出现static成员变量的时候,static成员变量是存储在静态区当中的,它是一个共享的量,因此,在为这个类创建一个实例对象的时候,是无需再为static成员变量分配空间的,所以,这个类的实例对象所需要分配的空间是要排除static成员变量的,于是,当sizeof计算类的大小的时候会忽略static成员变量的大小。

  根据上述我所提出的解释,就能说明static变量不在类中的时候,用sizeof得到的大小为什么不是0了,因为static不在类中的时候,为static类型(static int等等)定义一个变量的时候,是必须要分配空间的,所以sizeof计算得到的就是为这个类型的 变量分配的空间的大小。

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇C/C++中容器vector使用方法 下一篇C++空类以及没有成员变量

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目