const用法总结
C++中const限定符,用于修饰不可改变的量,大体用法主要有以下几种。
- const修饰常用数据类型
- const修饰函数的传入值
- const在类中的用法
- const声明类的常量对象
1.const修饰常用数据类型
1.1修饰一般常量及数组
const修饰一般常量
int const num = 100;
const修饰数组
int const array[3] = {1,2,3};
用const声明常量必须初始化,const限定符修饰的常量不可以改变其值,以下写法都是错误的:
int const num ; //没有初始化
int const bufSize =512;
bufSize = 10 ; //const常量不可以改变其值
1.2修饰指针
const修饰指针有两种,第一种是const限定符在 * 左边,例如 int const *p,表示的是常量指针,本质是一个指针,指向一个不可以改变的常量。常量指针指向的值不能变,指针可以变,如下图所示。
int a = 100;
int b = 200;
int const *p = &a;
*p = b; //错误,指向的值不能变
p = &b; //正确,指针可以改变
第二种是const在 * 右边,即 int * const p,称为指针常量。指针常量本质是一个指针类型的常量,p本身的值不可以修改,但是可以修改p指向的值。
int a = 100 ;
int b = 200;
int *const p = & a ;
*p = b; //正确,指向的值可以改变
p = &b; //错误,不可以改变指针的值
常量指针和指针常量可以用来规范接口。防止在实现函数内部的时候,改变了接口参数指向的值(指针常量),或者把参数错误指向别的地方(常量指针)。
2.修饰函数的传入值或者返回值
2.1 用于函数的形参
void fun(const int * p)
const用于函数形参,表示该参数在函数内部不会被改变,当函数要传入某个指针或者数组,但不想在函数运行结束以后,改变它们的值,即可用const修饰。
3. const在类中的用法
3.1 const 修饰类中的成员函数
在类中,声明为const的成员函数,不能修改数据成员的值,也不能调用非const成员函数,因为非const成员函数会改变数据成员的值,所以const成员函数既不能改变数据成员的值,也不能调用非const成员函数。
#include <iostream>
using namespace std;
class A{
private:
int i;
public:
//set函数需要设置i的值,所以不能声明为const
void set(int n){
i = n;
}
//get函数返回i的值,不需要对i进行修改,则可以用const修饰。防止在函数体内对i进行修改。
int get() const{
return i;
}
};
3.2 类中声明枚举变量
class test
{
enum { SIZE1 = 10, SIZE2 = 20}; // 枚举常量
int array1[SIZE1];
int array2[SIZE2];
};
4. const声明类的常量对象
常量对象只能调用常量函数,别的成员函数都不能调用。
class test
{
public:
test():x(1)
{
y=2;
}
~test()
{}
void set(int yy)
{
y=yy;
}
int getx() const
{
return x;
}
//protected:
const int x;
int y;
};
void main()
{
const test t;
t.set(33); //error
t.getx();
}