1、#define预处理指令
例如 #define SECONDS (30)UL
不能以分号结束,括号的使用,UL表示是无符号长整形
例如 写一个“标准”宏MIN,这个宏输入两个参数并返回较小的一个
#define MIN((A)<=(B)?(A):(B))//在宏中要把参数用括号括起来
2、const函数的作用
(1)可以定义常量。
(2)const可以修饰函数的参数和返回值,甚至函数的定义体,被const修饰的东西都受到强制保护,
可以预防意外变动,能提高程序健壮性
3、const与#define相比有什么不同
const常量有数据类型,而宏常量没有,编译器可以对前者进行类型安全检测,而对后者没有类型安全检测,
并且在字符替换中可能会产生医疗不到的错误(边际效应)
有些集成化的调试工具可以对const常量进行调试,但是不能对宏常量进行调试。
在C++程序中只使用const常量而不使用宏常量,即const常量完全取代宏常量。
4、更改const函数成员
类里的数据成员,加上mutable修饰之后,const的成员函数就可以修改它了。例如
class C{ private: int a;
public:
int A() const
{ return --a; } }
5、内存对齐问题
下面程序的运行结果是多少
#include<iostream>
using namespace std;
class A1{int a; static int b;};
class A2{int a; char b;};
class A3{int a;flaot b;char c;double d;}
int main(){A1 A;cout<<sizeof(A1)<<sizeof(a)<<sizeof(A2)<<sizeof(A3);return 0;}
静态变量是放在全局数据区的,而sizeof是计算栈中分配的大小,所以sizeof(A1)是,4sizeof(a)也是4
为了照顾数据对齐,int大小是4,char是1,所以sizeof(A2)是8;
double是8,flaot是4,所以sizeof(A3)是24
天就到这里,有不足的地方还请指正,谢谢大家!