C++中关键字const的用法
const 是C++的一个关键字,现在对它的用法做一个小结。
1. 定义常量
在C中,如果要频繁的使用某一个常量,可以利用宏定义来利用一个符号定义这个常量,以后用到这个常量的地方就用这个符号代替即可,这样修改这个常量的值也方便了很多。在C++中,我们可以利用 const 替代宏定义,具体代码如下:
#define M 15
const int N = 15;
const 修饰的变量只能在定义位置修改值,其他地方不能对其值进行更改。
注:宏定义是一种不做任何语法性检查的替换,而 const 可以进行类型检查。
2. 函数参数包含const
首先要明确,在C++中,参数传递可以传值,也可以传引用。过去C中可以传指针,而传引用底层就是传指针的效果。所以,当参数所占内存较大时,传引用相较传值而言,就高效了很多。所以,C++中,推荐使用传引用操作。而在传引用时,如果不希望函数改变传入的实参,就可以添加关键字 const 。示例代码:
class complex{
public:
...
complex& operator += (const complex&);
...
private:
double re, im;
};
3. 函数返回值包含const
同函数参数一样,在C++中,函数返回值传递可以传值,也可以传引用。类似,C++中,推荐使用传引用操作。而在传引用时,如果不希望函数返回值被改变,就可以添加关键字 const 。示例代码:
const int& add(int, int&);
4. 常量成员函数
在类中,如果一个函数不会改变类的数据,那么可以把这个函数声明成常量成员函数。示例代码:
class complex{
public:
...
double real() const { return re; }
double imag() const { return im; }
...
private:
double re, im;
};
const 表示该函数不会改变类中的数据。为什么最好要加 const 呢?
const complex c1(2, 1);
cout << c1.real();
cout << c1.imag();
原因是假如我们在程序中这样定义了一个对象并且调用这两个函数,而这假设类中两个函数没有加 const ,那么编译器就会报错。
下面就 const 变量和 const 函数之间使用规则进行说明。
const 变量可以调用 const 成员函数和 non-const 成员函数,但 non-const 变量只能调用 non-const 成员函数,不能调用 const 成员函数。