深圳冰川网络Visual C++面试经验

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/haimianjie2012/article/details/87429102

自我介绍

你期望的薪资

结构体所占存储空间

http://www.cnblogs.com/-zhangnian/p/6422559.html

空的类是会占用内存空间的,而且大小是1,原因是C++要求每个实例在内存中都有独一无二的地址。

(一)类内部的成员变量:

普通的变量:是要占用内存的,但是要注意对齐原则(这点和struct类型很相似)。

static修饰的静态变量:不占用内容,原因是编译器将其放在全局变量区。

(二)类内部的成员函数:

普通函数:不占用内存。

虚函数:要占用4个字节,用来指定虚函数的虚拟函数表的入口地址。所以一个类的虚函数所占用的地址是不变的,和虚函数的个数是没有关系的

再举个例子,看看在默认对齐规则下,各结构体成员的对齐规则:  

  1. //by www.datahf.net zhangyu
  2. typedef struct A 
  3.     char c;  //1个字节
  4.     int d;  //4个字节,要与4字节对齐,所以分配至第4个字节处
  5.     short e;  //2个字节, 上述两个成员过后,本身就是与2对齐的,所以之前无填充
  6.  }; //整个结构体,最长的成员为4个字节,需要总长度与4字节对齐,所以, sizeof(A)==12 
  7. typedef struct B 
  8.     char c;  //1个字节
  9.     __int64 d;  //8个字节,位置要与8字节对齐,所以分配到第8个字节处
  10.     int e;  //4个字节,成员d结束于15字节,紧跟的16字节对齐于4字节,所以分配到16-19
  11.     short f;  //2个字节,成员e结束于19字节,紧跟的20字节对齐于2字节,所以分配到20-21
  12.     A g;  //结构体长为12字节,最长成员为4字节,需按4字节对齐,所以前面跳过2个字节,
  13. //到24-35字节处
  14.     char h;  //1个字节,分配到36字节处
  15.     int i;  //4个字节,要对齐4字节,跳过3字节,分配到40-43 字节
  16. }; //整个结构体的最大分配成员为8字节,所以结构体后面加5字节填充,被到48字节。故:
  17. //sizeof(B)==48;

    具体的分配图如下:

 https://img-blog.csdn.net/20170216094637189?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMjU4Njc2NDk=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center

设计模式

Map的erase方法

常量指针与指针常量

Class A{

  Int value {return 0;}

}

A* const p1=new A();

Const A* p2=new A();

Cout<<p1->value<<p2->value()<<endl;

P1=p2;

A* const p3=0;

Cout<<p3->value();

猜你喜欢

转载自blog.csdn.net/haimianjie2012/article/details/87429102