博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C++中const的用法:使代码更加健壮
阅读量:4205 次
发布时间:2019-05-26

本文共 1657 字,大约阅读时间需要 5 分钟。

本文将从三个方面来讨论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 const) const pointer,const dataconst *int const g= # //同上,g的地址和值都不能被改变,这个指针类型是(const *int const) const 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;}

转载地址:http://mxoli.baihongyu.com/

你可能感兴趣的文章
yourls 短连接 安装
查看>>
yii2 php namespace 引入第三方非namespace库文件时候,报错:Class not found 的解决
查看>>
softlayer 端口开放
查看>>
操作1:mongodb安装
查看>>
操作2:mongodb使用语法
查看>>
如何给分类增加一个属性(后台)
查看>>
linux设置环境变量 临时设置 和 永久设置
查看>>
mysql数据库主从同步的问题解决方法
查看>>
LoadRunner如何在脚本运行时修改log设置选项?
查看>>
QC数据库表结构
查看>>
自动化测试工具的3个关键部分
查看>>
测试工具厂商的编程语言什么时候“退休”?
查看>>
资源监控工具 - Hyperic HQ
查看>>
LoadRunner中Concurrent与Simultaneous的区别
查看>>
SiteScope - Agentless监控
查看>>
QTP测试.NET控件CheckedListBox
查看>>
使用QTP的.NET插件扩展技术测试ComponentOne的ToolBar控件
查看>>
用上帝之眼进行自动化测试
查看>>
为LoadRunner写一个lr_save_float函数
查看>>
PrefTest工作室全新力作-《性能测试与调优实战》课程视频即将上线
查看>>