当前位置: 移动技术网 > IT编程>开发语言>C/C++ > C++下的const:const修饰变量、const修饰的迭代器和const修饰函数学习讲解

C++下的const:const修饰变量、const修饰的迭代器和const修饰函数学习讲解

2018年10月03日  | 移动技术网IT编程  | 我要评论

上海复星医药集团,机器战警3,廖勾蛋

const指定一个语意约束,编译器会强制实施这个约束,告诉编译器和程序员某值应该保持不变。

1、const修饰变量

const可以修饰在class外部的global或namespace作用域中的常量;可以修饰文件、函数、区块作用域中声明为static的对象;也可以修饰class内部的static和non-static成员变量。

还可以修饰指针或指针所指物,根据const位置的不同,修饰的也不同(判断的诀窍是:const出现在*的左端还是右端,左端修饰指针所指物,右端修饰指针本身):

char[] greeting = "hello";
char* p = greeting;

//下面的两行,指针所指物是const,而指针本身是non-const
const char* p = greeting;
char const * p = greeting;

//指针所指物是const,而指针本身是non-const
char* const p = greeting;

//下面两行指针所指物是const,指针也是const
const char* const p = greeting;
char const * const p = greeting;

2、const修饰的迭代器

stl的迭代器是根据指针来实现的,所以迭代器的作用像一个t*的指针。

1、当声明迭代器用const 修饰时:表示这个迭代器不得指向其他的东西,但是所指东西的值是可以改变的。

2、当迭代器由const_iterator来定义时:表示这个迭代器所指东西的值是不可以改变的。

3、当声明迭代器用const 修饰并由const_iterator来定义时:表示这个迭代器所指东西的值是不可以改变的。

例子如下:

std::vector<int> vec;
//...

//作用同 t * const
const std::vector<int>::iterator iter = vec.begin();
*iter = 10;     //正确!可以改变所指物
++iter;         //错误!iter是const

//作用同 const t * 或者 t const *
std::vector<int>::const_iterator citer = vec.begin();
*citer = 10;    //错误!*citer是const
++citer;        //正确!可以改变指针

const std::vector<int>::const_iterator cciter = vec.begin();
*cciter = 10;   //错误!*cciter是const
++cciter;       //错误!cciter是const

3、const修饰函数

class rational { /*---*/};
const rational operator* (const rational& lhs, const rational& rhs);

上面这个乘积操作符重载为什么函数的返回值用const修饰?

原因:类似与下面的操作, a*b的结果不能被修改,不能作为左值,但在程序员的编码过程中有可能会出现不小心的错误,这样做可以防止无意的赋值操作。

rational a, b, c;
//---
(a * b) = c;
if(a * b = c);

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网