2-2 理解const

1 const

  • 在引用中注意不能为常量绑定一个非常量的引用
  • 在指针中区分low-level consttop-level const

const通常用于定义常量,一经定义不许修改,且使用const必须初始化

2 定义形参

当我们在使用某个函数时,不希望变量在函数内部被改变,则可以将形参定义为const形式

void function (const int value)

3 const与引用

const和引用放在一起使用时要注意,常量值不可以绑定到非常量的引用上,但是非常量可以绑定到常量的引用上。

non-const -> const 
const !-> non-const

非常量值绑定到常量类型的引用是因为编译器帮我们产生了一个const类型的临时变量,比如:

int i=1;
const int &value=i;

//编译器行为
const int temp=i;
const int &value=temp;

4 const与指针

如果我们需要一个指针指向常量时,那么这个指针也必须是常量类型,否则编译器会报错。另外在C++ Primer中我们可以看到low-level consttop-level const这样的概念,通过一个例子来理解

const int value=123;//top-level
const int *pvalue=&value;//low-level
*pvalue=456;    //错误

const int value=123;
const int *pvalue=&value;
int vol_value=456;
pvalue=&vol_value;//正确

这里注意在第一段的程序里const修饰的并不是pvalue,而是外面的int部分,这里应该理解为一个指针pvalue指向const int类型,即它的指向类型不能变。由于其所指地址是常量属性,常量不允许被修改,所以会报错,但是指针pvalue还是可以改变所指方向的。

那么如果我们不希望指向常量的指针被修改,那么就应该让它成为top-level const,它所修饰的就是指针这个对象了,即如下所示

const int *const pvalue

区分top-level还是low-level并不是说看const在里面还是在外面,而是看他所修饰的是什么。对于指针这样的复合类型来说,如果修饰的是一个对象,那就是top-level,如果修饰的是基本类型,那就是low-level

posted @ 2023-03-10 18:23  白日梦想家-c  阅读(20)  评论(1编辑  收藏  举报