C++中的const关键字

C++中的const关键字的用法非常灵活,可以极大改善程序的健壮性,故此总结一下该关键字的主要用法。


1. 用于定义常量:

const int var = 1;

int const var = 1;

用途:var的值是不可改变的。


2. 用于定义常量指针:

int a = 1;
int* const var = &a;
//var++; error
*var = 2;

用途:指针本身是一个常量,不可对其操作,如var++,但其指向的内容是可以改变的。


3. 用于定义指向常量的指针:

int a = 1;
const int*  var = &a;
//*var = 2; error
var++;

用途:指针所指向的内容是常量,不可对其操作,如*var = 2,但指针本身不是常量,可以对指针本身进行操作。


4. 用于指向常量的常量指针:

int a = 1;
const int* const var = &a;
//var++; error
//*var = 2; error

用途:指针本身是个常量,且是一个指向常量的指针,指针本身不可操作,且指向的内容也是不可操作。


5. 修饰类的成员函数:

class A {
public:
A():x(0) {}
void get() const {x = 1;}//error
private:
int x;
};


6. 类对象的操作:

class A {
public:
A():x(0) {}
void get() const {int a = x;}
void set() {x = 1;}
private:
int x;
};
int main(int argc, char *argv[]) {
const A* a = new A;
a->get();
//a->set(); error


delete const_cast<A*>(a);
a = 0;
return 0;
}

常量指针的对象只能调用被常量修饰的成员函数,但普通的对象也能调用被常量修饰的函数。


7. const与非const的转换:

因为不能把const的变量直接赋给一个非const变量,所以需要进行转换。

int main(int argc, char *argv[]) {
int i = 0;
const int* a = &i;
//*a = 1; error
int* j = const_cast<int*>(a);
*j = 1;
return 0;
}


把一个非const变量转换成一个const变量

int main(int argc, char *argv[]) {
int i = 0;
int* a = &i;
const int* j = const_cast<const int*>(a);
//*j = 1; error
return 0;
}

注:const_cast只能用于转换指针变量,普通变量不能使用const_cast转换(类也一样)

int main(int argc, char *argv[]) {
const int i = 0;
//int j = const_cast<int>(i);  error
return 0;
}


8. const比define的区别:


define是在预处理阶段处理。

const是在编译阶段处理。


define没有类型,只是一个标示符,不做任何安全的类型检查

const具有具体的数据类型,在编译时会做类型的安全检查。


define在预处理阶段时,有多少个地方使用,边有多少个该定义被拷贝,不会分配内存,只是替换。

const会分配内存。


9. const的优势:

具有安全类型检查;具有具体的数据类型,可以进行代码跟踪,方便调试







  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值