C++:3.static之常量
目录1.const/static const2.#define常量是相对于变量而言变量顾名思义就是值可以被改变而常量则不可以。C中常用的常量命名方式有两种一种是const 修饰变量名另一种是用#define 宏定义。1.const/static const很多博文说const 全局可见如果两个cpp中都定义了const int aa0会报重定义。而static const限制了作用域则不会报错。有点像int aa 0和static int aa0。实际我测试这种说法不成立或者说理论是这样可能编译器做了优化。实际测试中const和static const表现一样。加不加static无所谓。也许对于const int aa0编译器默认给加上了static这就不知道了。测试情况是如果在a.cpp中定义const int aa10在b.cpp中也定义const int aa10编译运行都没问题。如果只在a.cpp中定义const int aa10在头文件a.h中声明extern const int aa。那么在b.cpp中引入a.h后是能正常获取和使用aa的。对于static const aa10这种测试表现一样。C17后引入inline关键字。const的声明和定义可以简化只在a.h中定义inline const aa10b.cpp中引入a.h后也是能正常获取和使用aa的。2.#definedefine这种方式被称为宏定义是纯文本替换。如#define PI 3.14它会在所有使用PI的地方将PI直接替换为3.14。即使是 std::string strPI它也直接替换为std::string str3.14显然这有问题没有做类型检测。所以严格来说用const修饰变量的方式可能比宏定义这种要好。