C++中const的用法
const一般在C++的以下三种情况中使用。
一、定义常量
const在英语中就有常量的意思,其最基本的作用就是定义常量。定义的常量值无法被修改。
例如以下代码会报错。
#include <iostream>
int main()
{
const int a = 5;
a = 2;
return 0;
}
然而事实上是,C++中的const定义常量只能算是一个“承诺”,这个地方的值是可以通过其他方法修改的。比如下面的例子。
#include <iostream>
int main()
{
const int a = 19;
int *b = (int*)&a;
*b = 9;
std::cout << *b << std::endl;
return 0;
}
二、指针相关
-
const可以设置不能修改指针指向位置的值。
例如以下代码第六行是可以通过编译的,第七行就会报错。
#include <iostream> int main() { const int* a = new int; a = new int; *a = 2; return 0; }
有些时候也有另一种表达方式,效果是一样的。
int const*
-
定义“指针常量”,定义完成后,该指针的值无法被修改。
以下代码在第七行会报错,此时const关键字的位置是在变量类型int之后。
#include <iostream> int main() { int* const a = new int; *a = 2; a = new int; return 0; }
三、const在类中的使用
类的方法后面加上const关键字代表此方法不能修改成员变量的值。
比如以下代码,在第九行就会报错,因为此方法被定义为不能修改x的值。
#include <iostream>
class A
{
public:
int x;
void changeX() const
{
x += 1;
}
};
int main()
{
A* a = new A;
a->changeX();
return 0;
}
但是关键字mutabel 可以给成员变量’“特权”,让其可以被修改。
#include <iostream>
class A
{
public:
mutable int x, y;
void changeX() const
{
x += 1;
}
};
int main()
{
A* a = new A;
a->changeX();
return 0;
}