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 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 i
和 const 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;}
阅读全文
1 0
- C++中const的用法:使代码更加健壮
- 让代码更加健壮 【总结】
- 让你的C++代码变的更加健壮
- 让你的C++代码变的更加健壮
- 让你的C++代码变的更加健壮
- 让你的C++代码变的更加健壮
- 走出“温室”的花朵更加美丽健壮
- 让你的代码变的更加健壮(Making your C++ code robust)
- 让你的C++代码变的更加健壮(Making your C++ code robust)
- C中const用法
- 再议C/C++中const的用法
- C语言中const的用法
- C语言中const的用法
- C/C++中const的用法
- C语言中const的用法
- C语言中Const的用法
- C语言中const 的常见用法
- C/C++语言中const的用法
- 数据结构实验之图论三:判断可达性
- JCrontab的一个简单的案例
- 使用POI和dom4j来解析Excel生成Xml
- JAVA-常用类
- 机房重构存储过程
- C++中const的用法:使代码更加健壮
- iOS开发之UI篇(6)—— 动画效果
- ZYNQ基础系列(一) AXI总线通信
- Toast
- 收银台 支付键盘 第二版
- 小昭的早晨——微信小程序开发伊始
- HDUOJ 2050
- Windows 7 运行VS2015编译的软件提示缺少ucrtbased.dll文件的解决办法
- ID和IC卡的安全威胁