1.宏定义 特点:编译器进行简单替换,不进行类型检查。调试容易出问题,比如定义pi为3.1415926,使用pi时出错了,编译器可能报错3.1415926,而你不知道这个常数是啥错误,因为宏定义的如果是pi还好查,如果是464676这种特定条件的魔数就没办法知道这个数字错是哪里错了。如果定义const double pi为3.1415926,那么使用错误,编译器报错pi使用错误,你知道是哪个变量错了。 2.const定义常量,会进行类型检查,编译器保证此变量不会出现在等号左边,除初始化情况。