标签:
const和 define在常量定义上的问题
在C++中,我们都鼓励使用const定义常量,而不是宏define。原因有很多。
一。const比define更优雅,更符合符号常量的本意。
二。define用在复杂的代码中,不理解define的实质的人就会出问题。define是代码字面上的替换,预处理阶段还原替换的内容。而typedef是包装已经存在的类型(或者复合类型),定义新的原子类型。
#include<iostream> #define DAYS 365 const int MONEY = 100; int main(void) { using namespace std; int total = DAYS*MONEY; cout<<total<<endl; system("pause"); return 0; }
预处理后
#include<iostream> const int MONEY = 100; int main(void) { using namespace std; int total = 365*MONEY; //预处理器将DAYS替换为356 cout<<total<<endl; system("pause"); return 0; }
const定义的常量可以说是“不变的变量“,因为它确实用了一个变量取保存某个不会发生改变的值,而define定义的常量,实质上是字面值常量,当然也不会改变了。
const到底修饰谁,到底哪个才是不变的?
我总结的是:如果const放在最前面,则const会往后跨越一个原子类型,修饰后面的。如何理解这句话,通过代码演示:
#include<iostream> int main(void) { using namespace std; int a = 1; const int*p = &a; //int为原子类型,实质效果是: int const*p = &a; //即:通过指针p来操作a时,a是一个常量,只读不可写。 system("pause"); return 0; }
#include<iostream> typedef int* pint; int main(void) { using namespace std; int a = 1; const pint p = &a; //pint为原子类型,实质效果是: pint const p = &a; //即:p是一个常量,只读不可写。 //p = NULL error //*p = 100 ok system("pause"); return 0; }
标签:
原文地址:http://www.cnblogs.com/lulipro/p/5452183.html