1:尽量使用 const 来替换 #define
宏定义 #define 在编译器发现它前被预处理器拿走了,导致宏定义的常量从未进入过记号表,出现编译错误,所以尽量以 const 来定义常量;常量定义用const;
2:const修饰常量和修饰指针
char name[] = "zmy";
const char* ptn = name; // 指向常量,不可以通过ptn来修改name的值;
char* const ptn = name; //指针常量,ptn不可以再指向别的地址了,只能指向name字符串数组
const char* const ptn = name; // ptn不可以指向别的地址,name也不可以被改变
总结:const出现在*之前常量不可变,出现在*之后该指针不可以再指向别的地址;
3.const用在成员函数内:任何不修改成员数据的函数都应该声明为const类型
class Person {
public:
int Print() const{ //声明该成员函数为 const类型, 函数体内不能改变成员数据
age = 100; // 修改成员数据 age 报错;
return age;
}
private:
int age = 10;
};
如果实在有某些成员数据要可以被修改,可以在前面加上 mutable 关键字,代表这些成员变量总是可以被修改的,即使是在const函数内。
class Person {
public:
int Print() const{
age = 100; // 修改age 不报错;
return age;
}
private:
mutable int age = 10; //声明age是可以被改变的
};