c++中const用法相关总结
来源:互联网 发布:淘宝u站在哪里进入 编辑:程序博客网 时间:2024/05/23 16:51
最近也是要考c++了。。。所以把和const有关内容进行一个总结。。。
参考了这篇博文许多http://blog.csdn.net/mysunshinetbg/article/details/48346195
明白了许多,也在这之中添加了const限制函数参数以及常量成员函数两个很简单的内容。。。
1.const与常量
与变量不同,有const修饰的量是常量,常量的值不可改变。
-常量一经定义就不能修改
const int i=5; //定义常量ii = 10; //错误,修改常量i++; //错误,修改常量
-const常量必须在定义时初始化
const int n; //错误,常量n未被初始化
-在常量定义语句中可以出现表达式
int i, k = 9;const int i1 = 10 + k + 6;const int i2 = j + 10;
2.const与指针
-指向常量的指针
指针所指的对象是常量,指针本身是变量
const int *p; //等价定义为 int const *pint i = 1;int j = 2;p = &i;
p既然指向常量,但是在定义的时候却并没有初始化,而且指向的i是一个变量。
这是因为常量指针自认为指向的对象是常量。
常量指针既可以指向常量,也可以指向变量,常量指针的真正含义在于不能通过p来改变所指向对象的值,并不代表不能通过其他途径来改变对象的值。如:
const int *p; //等价定义为 int const *pint i = 1;int j = 2;p = &i;int *r = &i;*r = 9; //正确*p = 9; //错误
在const int *p;
中,指针p本身是一个变量,它可以指向不同的字符串对象,但它指向的对象是一个常量,即*p是一个常量。因此可以修改p中内容,但不能修改 *pc中内容。
const int *p; //等价定义为 int const *pint i = 1;int j = 2;p = &i;p = &j;
-指针常量
指针p中存放的地址不可改变,p只能初始化,不能改变所指向对象
int i = 1;int j = 2;int * const p = &i;*p = 2; //正确p = &j; //错误
- 指向常量的常量指针
指针是常量,指针所指对象也是常量,上述指针常量和常量指针拥有的修改方法全部没有了。比如:
int i = 1;int j = 2;const int * const p = &i;*p = 2; //错误p = &j; //错误
3.const 与函数
用const限制函数的参数能够保证函数不对参数做任何修改,如:
int f(int i1, const int i2){ i1++; i2++; return i1+i2;}
4.const与引用
和const指针一样,const引用可以与常量绑定,也可以与变量绑定,只是不能通过这个const引用来改变绑定对象的值
int a = 10;const int &ra = a;a = 5; //正确ra = 4; //错误
非const引用不能与const对象绑定,因为常量a的值不可改变,但却可以通过非const引用来改变常量a的值,这样做是错误的,如下:
const int a = 10;int &ra = a; //错误,非const引用不能绑定到const对象
引用的类型必须与所引用的对象类型一致,但是有例外情况:在初始化常量引用时可以用任意的表达式作为初始值,只要表达式的结果能转换成引用的类型。
double i = 2.33;const int &r1 = i;//正确
此时上述代码等价与(因为编译器会把其转换成这样来编码)
double i = 2.33;const int temp = i;const int &r1 = temp;
此时i为2.33然而r1为2(因为将其转换成了整型)
5.常量成员函数
在c++中,为了禁止成员函数修改数据成员的值,可以将它设置为常量成员函数。设置常量函数的方法是在函数原型后面加上const,如:
class A{ private: int i; int j; public: int geti() const; ... };
-只有类的成员函数才能定义为常量函数,普通函数不能被定义为常量函数,如:
int f(int x) const{ int b = x * x; return b;} //错误,普通函数不能为指定为const
-常量参数与常量成员函数是有区别的,常量参数限制函数对参数的修改,但与数据成员是否被修改无关,而常量成员函数限制的是对类数据成员的修改
- c++中const用法相关总结
- c/c++中const用法总结
- c/c++中const用法总结
- C/C++中const用法总结
- c/c++中const用法总结
- C/C++中const用法总结
- c/c++中const用法总结
- c/c++中const用法总结
- c/c++中const用法总结
- c/c++中const用法总结
- c/c++中const用法总结
- c/c++中const用法总结
- C/C++中const用法总结
- c/c++中const用法总结
- c/c++中const用法总结
- c/c++中const用法总结
- C/C++中const用法总结
- C/C++中const用法总结
- Super Shell 轻松玩转多源Linux服务器的工具
- C/C++编程(四)--C语言运算符优先级
- Linux趣事 -- (2.4)学生信息管理系统
- React Native 手势响应系统
- 基于tiny4412开发板LED灯驱动标准的llseek函数写法
- c++中const用法相关总结
- 一直处于迷糊状态后学点基础知识的感想
- 完全采用缺省配置的最简Spring-boot Web应用
- 计算并输出一个三位整数的个位以及十位百位数字之和
- Android-NDK编译.so文件
- gdb 调试多进程、多线程的小栗子
- 数学基础——导数
- C++中doulbe/float/int转为CString方法
- Mybatis3 快速入门