const让你的代码更安全
2016-05-22 22:18
239 查看
const 作为C/C++中常见的关键字对于大多数初入编程的人来说既陌生又熟悉。我们很多时候仅仅只是清楚其作用,在实际编程中较少留意其使用。那么今天我和大家一起探讨一下到底如何正确的使用const。
const 修饰的常量
const doublePI=3.1415926; 常量
const 修饰的函数
const 修饰的函数块中或者类中的对象或者量
如:
通过引用传进来的strVec并不希望其中的任何元素在GetTextLen函数中被修改,因此在传进来的形参前加上const 确保了数据的安全性。这也告诉我们在写函数的时候,对函数中的形参需要更多的思考,在设计之初就应该依据变量的值是否应该在函数中被修改,设计为const 型和非const 型。对于只是读取或者参考变量中的数据的形参建议要将其申明为const 类型,这样编译文件时编译器会为我们对用const修饰过的变量做修改检查,能够最大限度地保证数据安全。
对于某一个在程序中不会改变的量,我们可以将其申明为常量,例如const double PI=31.415926,自然对数const double E=2.71828,这样的申明方法能够保证这些常用的数据在程序中不被修改,且其定义方式好过利用宏定义的常量类型。
常量指针是指数值是常的指针,本质是一个指针,只是其指向的量不可以改变其数值,如:
指针常量是指指针自身是一个常量,本质是指针,只是指针的值不可以重新赋予,如:
const 修饰符可以在任何作用域内的变量,函数形参,函数返回值,代码块中。
const 修饰的类型主要包括:常量,函数或块作用域中的对象
例如:const 修饰的常量
const doublePI=3.1415926; 常量
const 修饰的函数
class Person { …….. public : void showInfomation(IntPersonID) const; //// 修饰函数的const,表示此函数不可以修改person类中的任何成员变量。 Prvate: string m_name; int m_age; int m_address; }
const 修饰的函数块中或者类中的对象或者量
void InputDataToMemory(Vector<personClase> & persons) { ............. for(int i=0;i<persons.size(i);i++) {. ........ const personClase signalPerson=persons.at(i); ////const 修饰函数或块作用域中的对象,表示接下来的代码中不可以对signalPerson中的任何变量修改; .................. } }
为什么要用const:
<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">例如有一个函数,只是想读取形参变量中的数据,不需要甚至不允许修改其值,这时只要在形参前面,将传进来的数据加上const 修饰,这样函数体中<span style="font-family: Arial, Helvetica, sans-serif;">任何</span><span style="font-family: Arial, Helvetica, sans-serif;">对变量值的修改操作都会被编译器提醒非法:</span></span>
如:
void GetTextLen(const vector<string> &strVec) { ...... }
通过引用传进来的strVec并不希望其中的任何元素在GetTextLen函数中被修改,因此在传进来的形参前加上const 确保了数据的安全性。这也告诉我们在写函数的时候,对函数中的形参需要更多的思考,在设计之初就应该依据变量的值是否应该在函数中被修改,设计为const 型和非const 型。对于只是读取或者参考变量中的数据的形参建议要将其申明为const 类型,这样编译文件时编译器会为我们对用const修饰过的变量做修改检查,能够最大限度地保证数据安全。
对于某一个在程序中不会改变的量,我们可以将其申明为常量,例如const double PI=31.415926,自然对数const double E=2.71828,这样的申明方法能够保证这些常用的数据在程序中不被修改,且其定义方式好过利用宏定义的常量类型。
指针常量和常量指针
在实际应用中还有一个十分让人混淆的概念,常量指针和指针常量,对这两者的区别说明如下:常量指针是指数值是常的指针,本质是一个指针,只是其指向的量不可以改变其数值,如:
int a=9; const *int p=&a;///读法很简单,就是读const 和*,读法按照它们排列的先后顺序就好。 *p=10;///非法操作,试图修改指针所指常量的值
指针常量是指指针自身是一个常量,本质是指针,只是指针的值不可以重新赋予,如:
int a=9; int b=4; int *const p=&a;///读法很简单,就是读const 和*,读法按照它们排列的先后顺序就好。 p=&b;;///非法操作,试图修改指针的值
Marks:
尽量的使用const来修饰程序中不希望被更改的数据。const 修饰符可以在任何作用域内的变量,函数形参,函数返回值,代码块中。
相关文章推荐
- C#字符串Split方法的误区
- java之装饰者模式
- asp.net MVC Session锁的问题
- java程序使用JDBC接口连接数据库
- Struts 2 的stream result用法
- 市长信箱邮件查询服务: 使用SpringBoot搭建基础
- C#与闭包
- 手机抓包总发现东北大学IP,你需要知道的NTP服务器
- 1012. 数字分类 (20)
- c++作业6
- 编程为什么有趣?
- 1011. A+B和C (15)
- spring mvc 关于乱码的几种解决方式
- java基础第五天
- pyMagic:用python控制的Geek入门神器
- Java基础知识总结(绝对经典)
- ASP.NET Identity 修改表名和主键类型
- DELL R710 错误代码汇总
- Python进阶-函数式编程
- 利用for循环打印实心棱形和空心棱形