const
定义常量
在c语言中,我们学习过可以使用#define
来定义常量。但是#define
的原理是简单的替换,因此对于#define
来说没有类型检查这回事。
c++中提供了const
关键字,用const
关键字修饰的变量其值是不能修改的,因此可以使用const
关键字来替换#define
,这有益于编译器进行类型检查。
const
关键字定义变量如下代码所示:
#include<iostream>
using namespace std;
const int MAX = 1000;
const double PI = 3.14;
const char NAME[] = "yurui";
int main() {
MAX = PI;//报错
int a = PI;//警告
return 0;
}
如上程序所示,使用const
关键字定义了MAX
、PI
、NAME
三个全局变量。
通过MAX = PI;
对const修饰的变量进行赋值时会报错;通过int a = PI;
进行赋值时编译系统会给出警告,提示类型不符合。
通过上面的例子,我们可以看出,通过使用const
关键字修饰常量,在使用时编译系统会进行类型检查。
const
定义常量指针
通过const
关键字定义常量指针,这样就不能通过指针修改变量的值。
例如:
#include<iostream>
using namespace std;
int main() {
int a = 10;
const int* p = &a;
*p = 10;//报错
a = 100;//正确
return 0;
}
如上面的程序,定义常指针p
,当我们通过p
去修改其所指向的值时,编译器就会对其报错。
但通过变量名还是可以修改其值,如a = 100;
。
另外,观察下面代码:
#include<iostream>
using namespace std;
int main() {
const int* a;
int* b;
a = b;//正确
b = a;//错误
return 0;
}
对于常指针,我们可以直接对其赋值,如a = b;
;对于非常量指针,我们不能使用常量指针对其进行赋值,如b = a;
。
const
修饰引用对象
引用也可以用const
关键字修饰,这样就不能通过引用名来修改变量值了。
如下代码所示:
#include<iostream>
using namespace std;
int main() {
int a = 10;
const int& r = a;
a = 10;//正常
r = 10;//报错
}
在执行到r=10;
这条语句时编译器会报错,提示表达式必须是可修改的左值,因为我们再初始化引用时将其加上了了const
关键字,我们就不能通过引用名来修改变量的值了。
对于a = 10;
这条语句则执行正常,因为a没有const
关键字修饰。
再考量下面的代码:
#include<iostream>
using namespace std;
int main() {
const int a = 10;
const int& b = a;//正确
int& r = a;//错误
r = 100;//错误
a = 100;//错误
return 0;
}
对于用const
关键字修饰的变量,我们在为其创建引用对象时,任然需要创建const
类型的引用对象,且无法通过变量名或引用名来修改变量的值。
网友评论