烦恼一般都是想太多了。

0%

C++中的const一些误解

哈哈,对于 const 实在是有太多的说的了。

const 类型

常规来说,当我们对一个变量指定 const 的时候,表示这个变量是不能被改变的。事实上我认为内建类型,与引用类型还是有所不同的。

比如:

const int i = 100;

我们无法改变 i 的值。在这个时候,说的应该是,对于 i 这个符号哦代表的那块内存,是无法修改的。

我们生命一个指针:

int *p = &i;

你会发现,这个语句是不合法的,编译器的提示是:

cannot initialize a variable of type 'int *' with an rvalue of type 'const int *'

就是说,类型不一致。

所以从这里看出,我们的 const 与一个类型放在一起的时候,形成了一个新的类型。

const 指针

当我们如下定义一个指针的时候:

const int * p;

表示的是, p 这个符号,指向的是一个 const 内存区域,同时此内存区域的值类型是 int。我们是无法修改其值的,但这个时候,我们却是可以改变 p 的值的。

const int i = 100;
const int *p = &i;
*p = 200; // read-only variable is not assignable
const int j = 200;
p = &j

如果我们真的相要指定一个不会改变的指针(事实上,对于引用类型 & 就是这样做的),那么需要用 int * const p 这样的形式:

int  i = 100;
int * const p = &i;
int j = 20;
*p = j;
p = &j; //cannot assign to variable 'p' with const-qualified type 'int *const'

事实上:

int * const p ;
const int * p ;

这两种的效果是一致的。

我们想要指定一个果然是无法改变的变量应该是这样:

const int * const p;