define
没有类型,不能指明一组数据之间具有关联性,
有参宏的时候,逻辑不符合计算逻辑 容易产生误解
宏的结尾不用分号
宏的作用域是从定义位置开始,到文件结束,如果要终止宏定义的作用域,则可以用#undef 宏名称
#define PI 3.14
.......
#undef PI
const
const对象一旦创建后就不得在改变,所以const对象必须初始化
在不改变const对象的操作中还有一种是初始化,如果利用一个对象去初始化另一个对象,则他们是不是const都无关紧要
int i = 42;
const int j = i;
int k = j; 以上均正确
另外,在默认状态下,const对象仅在文件内有效,当多个文件中出现了同名的const变量,其实等同于在不同文件中分别定义了独立的变量
const int ci=1024;
const int & r1 = ci; //这里是正确的,因为引用及其对应的对象都是常量
r1 = 50; //这里是错误的 r1是常量的引用
int & r2 =ci; //错误,因为试图让一个非常量引用指向了一个常量对象
总结:因为不允许直接为ci赋值,当然也就不能通过引用去改变ci 因此对r2的初始化时错误的,假设合法,则可以通过r2去改变它来改变对象的值,这显然是不对的
用什么类型创建。用什么类型去保存
const int *p=&a //不用通过指针修改它所指向的位置的值
int const *p =&a //同上
int * const p //不能修改指针指向的位置 可以修改值
总结:const 在 * 左边,即不能修改 它指向位置的值 (*p就是指)加上const
const 在 * 右边 即不能修改它指向的位置,因为const 在p左边 p是地址变量
enum
写法注意:
enum DIR
{
up,
down,
left,
right //最后一个不用写逗号
};//不要忘记分号
默认从0开始 0-3
inline函数
#define f(x) x*x
inline int fun(int x)
{
return x*x;
}
int _tmain(int argc, _TCHAR* argv[])
{
printf("%d ", f(3 + 5));
printf("%d ", fun(3 + 5));//不会造成歧义,先把参数算出来,再参与计算。
return 0;
}
内联函数会对参数进行检测,不会造成歧义
内联函数会节省空间消耗