【面试】预处理 const static sizeof

2 篇文章 0 订阅
2 篇文章 0 订阅

1、宏参数的连接

#---字符串                    #n  == "n"

##---连接两个参数       a##b == ab

2、const的使用

const int *a=..     指针指向内容为常量    *a=1;//(error)

int* const a=..      指针本身为常量           a=&b;//(error)

3、const 与 #define的区别

#define 在编译时做文本替换,Compile-Time概念,生命周期终止于编译期。存在于程序的代码段,在实际程序中只是一个命令中的参数,并没有真实存在。

const 存在于程序的数据段,Run-Time概念,在堆栈中分配空间,在程序中确实存在并可以被调用,有数据类型,宏常量无数据类型。

4、C++中const的作用

1)定义常量

2)修饰函数形式参数。当传入参数为自定义类型或抽象类型时,将值传递改为 (A a)    ----> (A const &a),可以提高效率;

具体原因:第一种形式需要构建临时对象用于复制参数a,而临时对象的构造、复制、析构都需要消耗时间。第二种用引用传递不需要产生临时对象。光引用传递可能改变a的值,所以加const.

3)修饰函数的返回值;

const char *GetChar(){....}

char* ch=GetChar();//error

const char* ch=GetChar();//correct  返回值只能赋给const修饰的同类型指针

4)修饰类的成员函数(函数定义体);类的成员函数后面加 const,表明这个函数不会对这个类对象的数据成员(准确地说是非静态数据成员)作任何改变那就是常量(即 const)对象可以调用 const 成员函数,而不能调用非const修饰的函数。

int GetChar() const;

5、static作用

1)在函数体内,一个被声明为static的变量在函数被调用的过程中维持其值不变。

2)在一个模块内,函数体外声明的static变量,可以被模块内各个函数访问。模块外不行。是一个本地变量。

3)在一个模块声明的static函数,可以被模块内其他函数调用,模块外不行,是一个本地函数。

http://baike.baidu.com/link?url=duE-8QqoBv5dltZrl_s0zzuQDkNWMjiJWXvDpslVVlkfB024EAXS-uvMwFvysgmVGKH8BLkONEOK2HbUdp9Lla

http://blog.csdn.net/hackbuteer1/article/details/7487694

6、sizeof 计算变量字节数大小

32位 指针变量大小固定是4字节

char 1字节

int     4字节

short 2

double 8

sizeof计算数组大小    数组在内存中占字节数;若数组是函数传入参数,则被认为是指针,大小是4

7、sizeof计算类/结构体大小

字节对齐:结构体总大小是最宽数据类型的整数倍

/带虚函数 多一个虚函数指针成员 +4字节

/空类 编译器安插一个char给该类,用来标记其每一个对象。因此大小为1字节;一个空类继承了另一个空类,大小仍然是1字节。一个空类虚继承了另一个空类,编译器为其安插一个指向父类的指针,则其大小为4;一个空类虚继承另外两个空类,大小为8;一个包含静态变量的类,静态变量的大小不计算在类的大小中。

/计算联合体大小union 联合体大小取决于它所有成员中占用空间最大的大小。(字节对齐)

/CPU对齐 #pragma pack(x)修改编译器对齐方式(默认对齐为8),对齐时选择编译器对齐方式与自身大小中较小的一个。 

8、内联函数


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值