6、预处理、const、sizeof
2015-08-08 22:26
232 查看
1、#define声明一个函数,表明一年有多少秒(忽略闰年) #define SECONDS_PER_YEAR (60*60*24*365)UL 考察主要有几点: a、语法知识,不能有分号,括号使用 b、预处理将计算常数表达式的值,写出如何计算比给出实际值更有意义 c、16位整数表达溢出,用到长整型L,考虑无符号UL会更好 写一个MIN宏,返回较小的一个 #define MIN(A,B) ((A<=B)?(A):(B)) 注意括号使用 2、const与#define有什么不同? C+中都可以用来定义常量,但const比#define有更多优点 a、const常量有数据类型,而宏常量没有。编译器对const进行类型安全检查,而后者只是简单的字符替换(在字符替换中可能产生意料不到的错误--边际错误) b、有些集成化的开发工具可能对const常量进行调试,但不能对宏常量进行调试。 3、const成员函数中,如何修改成员变量? const成员函数中,用mutable修饰成员变量名后,就可以修改类的成员变量了。 4、sizeof,内存对齐原则
struct { char a ; int b ; short c ; }A; sozeof(A)=12 struct { short c ; char a ; int b ; }B; sozeof(B)=8 char q1=”a\n” sizeof(q1)=3 \n为一字节 char* q2=”a\n” sizeof(q2)=4 为指针大小
http://www.cppblog.com/snailcong/archive/2009/03/16/76705.html
为什么要进行内存对齐? 计算结构体变量大小时必须考虑数据对齐,虽然会浪费一些内存,但会使CPU的存储速度更快,效率更高 5、sizeof和strlen的区别 a、sizeof操作符结果是size_t (typedef unsigned int size_t) b、sizeof是操作符,strlen是函数 c、sizeof可以用类型做参数,strlen只能用char*做参数,且必须以“\0”结尾 d、数组做sizeof参数不退化,做strlen参数退化为指针 e、大部分编译程序在编译时就已经把sizeof计算出来了,strlen在运行时计算出来(计算字符串长度而不是所占内存大小) f、sizeof如果后接类型必须加括号,变量则不需要,因为它是操作符而非函数。 g、sizeof不能用于函数类型,不完全类型或位字段 6、内联函数和宏定义的区别? 内联函数和普通函数相比可以加快函数的运行速度,因为不需要中断调用。而宏只是一个简单的替换。 内联函数要做参数类型检查,这是内联函数相比宏的优势。inline是嵌入代码,把代码直接嵌入,和宏一样。inline和宏相比在不用付出额外代价的情况下更安全。宏是不加任何验证的直接替换。 inline适用于以下情况: 一个函数被反复调用。 简单几行,不含forwhile switch等语句 inline必须与函数定义体放一起才能成为内联函数,如下:
inline void f(int x,int y); //inline与声明放一起,非内联 void f(int x,int y) {} 定义 //内联函数 void f(int x,int y); inline void f(int x,inty){}
相关文章推荐
- Mac配置Python开发环境(Eclipse +Pydev+Python)
- 第八章 高效算法设计
- java关于==与equals的讨论
- springMVC
- muduo::Acceptor、TcpServer分析
- STL之vector简单实现
- 等待时动画效果的实现
- Lucene.Net+盘古分词->开发自己的搜索引擎
- Jquery实现图片轮播功能
- 常见的HTTP状态码(HTTP Status Code)说明
- 五分钟上手Git
- python easy_install django 安装
- 70.Climbing Stairs
- 浅谈C/C++的浮点数在内存中的存储方式
- 【数论】hdu3944 DP?
- 工作总结
- Linux中vi文件保存退出命令“:wq"和":x”的区别
- Java学习——话说J2EE发展历程
- Amber大神的《最小割模型在OI中的应用》膜后感
- dave3,UpdateSiteDAVEApps_1_0_66 ,dave4_v4.0.0 ,dave_v4.1.2 软件安装资源汇总