设为首页 加入收藏

TOP

C++下的const:const修饰变量、const修饰的迭代器和const修饰函数学习讲解
2018-05-26 14:14:00 】 浏览:121
Tags:const 修饰 变量 函数 学习 讲解

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);
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇C++首先是后置++的重载的代码实现 下一篇C++结合TCP/IP协议 实现客户端和..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目