const和 define在常量定义上的差别
在C++中,我们可以使用const 或者 宏define来定义常量。但是C++鼓励使用const定义常量,而不是宏define。原因有很多。
1、define是C遗留下来的老古董,const比define更优雅,更符合符号常量的本意。
2、define用在复杂的代码中,不理解define的实质的人就会出问题。define是代码字面上的替换,预处理阶段还原替换的内容。
const定义的常量可以说是“不变的变量“,因为它确实用了一个变量取保存某个不会发生改变的值,而define定义的常量,实质上是字面值常量,当然也不会改变了。
const与指针:到底修饰谁,到底哪个才是不变的?
我总结的是:如果const放在最前面,则const会往后跨越一个原子类型,修饰后面的。如何理解这句话,通过代码演示:
#include<iostream> int main(void) { using namespace std; ; const int*p = &a; //int为原子类型,实质效果是: int const*p = &a; //即:通过指针p来操作a时,a是一个常量,只读不可写。 system("pause"); ; }
#include<iostream> typedef int* pint; int main(void) { using namespace std; ; const pint p = &a; //pint为原子类型,实质效果是: pint const p = &a; //即:p是一个常量,只读不可写。 //p = NULL error //*p = 100 ok system("pause"); ; }