名正在想的博客

C++中const用法简要总结

By 名正在想


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的注意事项

  1. 在C++中,应该使用const代替#DEFINE进行常量定义。
  2. 使用全大写命名常量是一个好习惯。
  3. 如果不希望数据被改变,应该尽可能使用const,当指针或引用作为参数时特别如此。