您的位置:首页 > 编程语言

const让你的代码更安全

2016-05-22 22:18 239 查看
const 作为C/C++中常见的关键字对于大多数初入编程的人来说既陌生又熟悉。我们很多时候仅仅只是清楚其作用,在实际编程中较少留意其使用。那么今天我和大家一起探讨一下到底如何正确的使用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 修饰符可以在任何作用域内的变量,函数形参,函数返回值,代码块中。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: