Z03 C++中const的通常用法
来源:互联网 发布:软件项目管理论文 编辑:程序博客网 时间:2024/06/03 19:32
1、指针与const
可以用两种不同的方式将const关键字用于指针。第一种方法是让指针指向一个常量对象,这样可以防止使用该指针来修改所指向的值。第二种方法是将指针本身声明为常量,这样可以防止改变指针指向的位置。
1)指针指向一个常量对象
#include <iostream>using namespace std;int main(void){int age = 29;const int * pt = &age;*pt = 30; //注意:第8行,程序报错,不能给常量赋值cout << "age: " << age << endl;system("pause");return 0;}说明:程序中pt指向const int(此处为29),因此不能用pt来修改这个值。但是,pt的声明并不意味着它指向的实际上就是一个常量,而只是意味着对于pt而言,这个值是常量,可以通过修改age变量来修改age的值,如下所示:
#include <iostream>using namespace std;int main(void){int age = 29;const int * pt = &age;age = 30;//注意:第8行,程序不会报错。cout << "age: " << age << endl;system("pause");return 0;}说明:C++中const变量的地址可以赋给const变量的指针,此时age的值既不能通过age变量修改也不能通过pt来修改,如下所示:
#include <iostream>using namespace std;int main(void){const int age = 29;const int * pt = &age;age = 30;//注意:第8行,程序报错,const变量的地址可以赋给const变量的指针。cout << "age: " << age << endl;system("pause");return 0;}使用const的理由:
- 可以避免由于无意间修改数据而导致的编译错误;
- 使用const使得函数能够处理const和非const实参,否则将只能接受非const数据。如果条件允许,应将指针形参声明为指向const的指针。
2)指针本身声明为常量
#include <iostream>using namespace std;int main(void){int age = 29;const int * pt = &age;int height = 30;pt = &height;cout << *pt << endl;//注意:*pt输出为30cout << "age: " << age << endl;system("pause");return 0;}说明:开始时pt指向const int使得pt不能修改age的值,但是如上程序不能防止修改pt的值,当pt为&height时,*pt的值为30,即此时pt不能修改height的值。
若使pt的值也不能改变,应使用下面声明,此时pt的值不能改变切pt指向的值也不能改变:
#include <iostream>using namespace std;int main(void){int age = 29;const int * const pt = &age; //使用这种结构int height = 30;pt = &height;//注意:第9行,程序报错cout << "age: " << age << endl;system("pause");return 0;}
2、为何将const用于返回类型的引用
const free_throws& accumulate(free_throws& target, const free_throws& source)说明:返回类型使用const引用后不允许给accumulate()类似赋值操作,如下所示
accumulate(参数1, 参数2) = four; //不允许修改accumulate()
3、const为类成员函数
const Stack land = Stack("ABC")land.show();说明:对于类Stack声明为const后,第二行show()的原型为void show()代码会编译错误,因为show()的代码无法确保调用对象不被修改。要保证不出现错误,则一种方法是将const加载show()函数后面,如下所示:
void show() const;
原理如下:
a、当类对象时const时表示对象不能修改,而当其调用成员函数时non-const时,成员函数表明可以修改对象。两者发生矛盾,所以不予许出现这种现象;
b、如果当成员函数的const和non-const版本同时存在,const object只能调用const member functions,non-const object 只能调用non-const member functions。
4、this指针的const用法
const Stock& topval(const Stock& s) const;说明:程序中类为Stock,topval()为比较两个Stock对象,其中第一个const为返回const引用,第二个const表明,该函数不会修改被显式地访问的对象 s。最后一个const表明,该函数不会修改被隐式地访问的对象 this。因此返回类型为第一个const 引用。
阅读全文
0 0
- Z03 C++中const的通常用法
- C中const用法
- 再议C/C++中const的用法
- C语言中const的用法
- C语言中const的用法
- C/C++中const的用法
- C语言中const的用法
- C语言中Const的用法
- C语言中const 的常见用法
- C/C++语言中const的用法
- C语言中const的用法
- C/C++中有关const的用法
- C语言中const的用法
- C/C++中const的用法
- C/C++中const的用法
- C/C++语言中const的用法
- C语言中const关键字的用法
- c语言中const的用法
- ubuntu安装TensorFlow及编辑器pycharm
- webstorm安装
- SSL2811 2017年10月30日提高组T2 摘Galo(树形dp)
- 对java super 学习理解
- html5 新增的语义化标签
- Z03 C++中const的通常用法
- Spring Bean的作用域和XML配置
- C#学习笔记---委托(1)
- 微信公众号开发---踩坑日记
- 一百年沧桑巨变,数学大树依然长青
- Writeup of NJUPT CTF platform's some easy Reverse
- unity中实现键盘打字的效果
- 32位win7改装64位win10遇到的问题及解决方法
- leetcode: 7.Reverse Integer