C++中const用法简要总结
(本来应该多放一些示例代码,懒癌晚期的我暂时先不放了……有空补上……)
const修饰普通变量
此时变量被看做一个常量,不能被修改。
注:实际上,你也可以施加阴谋诡计来改变内存中的值,但极不建议这种行为,因其可能会导致难以预料的结果。
const修饰指针变量
此时const的位置在初学时常易混淆,总结起来,有一种十分方便的判断方法:
以星号(*)为分界线,const在哪边,就说明哪边是常量。如,以下有四种定义:
A. const int * p = &a;
B. int const * p = &a;
C. int * const p = &a;
D. const int * const p = &a;
通过上述技巧很容易看出:A与B是等价的,表示a的数据不可修改;C表示p的指向不可修改;D表示a和p均不可修改。
const在普通函数中的使用
A. int func(const int a);
在此函数中,参数a的数据不可修改。
B. const int func(int a);
在此函数中,函数的返回值不可修改。然而要注意,上面这个示例实际上毫无意义,因为内置类型作为返回值时本身就是不可修改的。通常,如果要返回自定义类型,则使用const修饰符以保证返回值不被修改。
const在类成员函数中的使用
在类成员函数中,我们仍然可以使用普通函数中的用法,而此时const还有另外一种用法:
class Test {
public:
int a, b;
void func(int a) const {
this->a = 1;
a = 1;
return;
}
}
当const放在成员函数名之后时,代表此函数无权修改成员变量的值,因此,上述函数内容的第一行是不合法的,因为它试图修改成员变量a的值。然而注意,函数内容的第二行则是合法的,因为此处的a代表函数的一个参数,而非成员变量。(注:在实际开发中要避免这种重名!)
使用const的注意事项
- 在C++中,应该使用const代替#DEFINE进行常量定义。
- 使用全大写命名常量是一个好习惯。
- 如果不希望数据被改变,应该尽可能使用const,当指针或引用作为参数时特别如此。