C++中const的用法:使代码更加健壮

来源:互联网 发布:小径分岔的花园知乎 编辑:程序博客网 时间:2024/06/18 09:03

本文将从三个方面来讨论const带来的代码健壮性:const在变量中的用法,const在函数中的用法,const作为返回值的用法。

const在变量中的用法

代码示例:

int num = 1;const int a = 1;      //a的值不能被改变const int *b = #  //b的值不能被改变,这个指针的类型是(const int)const data,not const pointerint const *c = #  //同上,c的值不能被改变,这个指针的类型是(const int)const data,not const pointerint *const d = #  //d的地址不能被改变, 这个指针的类型是(const *int)const pointer, not const dataconst *int e = #  //同上,e的地址不能被改变, 这个指针的类型是(const *int)const pointer,not const dataint const* const f =# //f的地址和值都不能被改变,这个指针类型是(const *int constconst pointer,const dataconst *int const g= # //同上,g的地址和值都不能被改变,这个指针类型是(const *int constconst pointer,const data

当用const修饰的时候,被修饰的变量不能被改变,可以防止编程人员对不需要改变的常量进行更改。

const在函数中的用法

代码示例:

class obj{public:    obj()=default;    int change_a() const{        a = 5;     //错误,禁止const函数修改成员变量(error: assignment of member ‘obj::a’ in read-only object)        display(); //错误,禁止const函数调用非const成员函数(error: passing ‘const obj’ as ‘this’ argument discards qualifiers)    }    void display(){        std::cout << "HI" << std::endl;    }    //省略析构函数private:    int a = 1;    int b = 1;};

用const修饰的函数不能修改任何成员变量,不能调用任何非const成员函数。

const作为函数返回值的用法

返回值

const int func(){    return 5;}int main(){    int i = func();    const int j = func();}

这里func返回的值本身就是一个暂存在外部存储单元中的一个值,所以用const并没有意义,所以int iconst int j 都是可以接受这个值的。

返回指针(type const *data)

const int *func(){    int *a =  new int(5);    return a;}int main(){    int *a1 = func(); // 错误,a应该是一个常量指针(const data, not const pointer)    const int *a2 = func(); //正确    const *int a3 = func(); //错误, 这里是const pointer,但是值是可以改变的,要至少满足返回值的const条件     const *int const  a4 = func(); //正确,这里时刻const data,满足返回值的类型    return a;}
原创粉丝点击