C++ const关键字
2015-10-06 11:23
281 查看
const与普通变量
普通的变量
例如, int x = 3;
变量名是x, 变量地址是&x, 变量值是3;
const变量
例如, const int x = 3;
变量名是x, 变量地址是&x, 变量值是3,但是变量值不能改变;
const与指针类型
const int *p = NULL;
int const *p = NULL;
以上两种形式的写法完全等价
const int *const p = NULL;
int const *const p = NULL;
以上两种写法完全等价
int x = 3;
int y = 4;
const int *p = &x; //x本身可读可写,但是指针p只能读取x的值,不能修改
p = &y; //正确
*p = 4; //错误,因为const修饰的是*p
const与引用
int x = 3;
const int &y = x;
x = 4; //正确
y = 4; //错误
const作为函数参数
#include<iostream>
using namespace std;
void fun(const int &a, const int &b)
{
a = 10;
b = 20;
}
int main()
{
int x = 3;
int y = 5;
fun(x, y);
cout << x << y << endl;
return 0;
}
以上代码会在函数内部报错,因为a和b作为不可变的引用不能被赋值,这样做的好处是防止形参影响实参的值,以免发生混乱。
错误用法总结
const int x = 3;
x = 5; //错误,因为const修饰的x的值不能改变
const int x = 3;
int *y = &x; //错误,因为用一个可变的指针指向一个不可变变量,风险太大
普通的变量
例如, int x = 3;
变量名是x, 变量地址是&x, 变量值是3;
const变量
例如, const int x = 3;
变量名是x, 变量地址是&x, 变量值是3,但是变量值不能改变;
const与指针类型
const int *p = NULL;
int const *p = NULL;
以上两种形式的写法完全等价
const int *const p = NULL;
int const *const p = NULL;
以上两种写法完全等价
int x = 3;
int y = 4;
const int *p = &x; //x本身可读可写,但是指针p只能读取x的值,不能修改
p = &y; //正确
*p = 4; //错误,因为const修饰的是*p
int x = 3; int y = 4; int *const p = &x; p = &y; //错误,因为const修饰的是指针p,所以指针p不能改变 *p = 4; //正确
const int x =3; const int y = 4; const int *const p = &x; p = &y; //错误 *p = 4; //错误
const与引用
int x = 3;
const int &y = x;
x = 4; //正确
y = 4; //错误
const作为函数参数
#include<iostream>
using namespace std;
void fun(const int &a, const int &b)
{
a = 10;
b = 20;
}
int main()
{
int x = 3;
int y = 5;
fun(x, y);
cout << x << y << endl;
return 0;
}
以上代码会在函数内部报错,因为a和b作为不可变的引用不能被赋值,这样做的好处是防止形参影响实参的值,以免发生混乱。
错误用法总结
const int x = 3;
x = 5; //错误,因为const修饰的x的值不能改变
int x = 3; const int y = x; y =5; //错误,const修饰的y不能改变
int x =3; const int *y = &x; *y = 5; //错误,*y被const修饰,不能改变
int x =3; int z = 4; int *const y = &x; y = &z; //错误,y本身被const修饰,不能改变
const int x =3; const int &y = x; y = 5; //错误,因为引用y被const修饰,不能改变
const int x = 3;
int *y = &x; //错误,因为用一个可变的指针指向一个不可变变量,风险太大
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- 关于指针的一些事情
- c++ primer 第五版 笔记前言
- share_ptr的几个注意点
- Lua中调用C++函数示例
- Lua教程(一):在C++中嵌入Lua脚本
- Lua教程(二):C++和Lua相互传递数据示例
- C++联合体转换成C#结构的实现方法
- C++编写简单的打靶游戏
- C++ 自定义控件的移植问题
- C++变位词问题分析
- C/C++数据对齐详细解析
- C++基于栈实现铁轨问题
- C++中引用的使用总结
- 使用Lua来扩展C++程序的方法
- C++中调用Lua函数实例
- Lua和C++的通信流程代码实例
- C与C++之间相互调用实例方法讲解
- 解析C++中派生的概念以及派生类成员的访问属性
- C++ Custom Control控件向父窗体发送对应的消息