const让你的代码更安全

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:
  1. 尽量的使用const来修饰程序中不希望被更改的数据。
  2. const 修饰符可以在任何作用域内的变量,函数形参,函数返回值,代码块中。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值