在cpp中变量的初始化和赋值过程中会忽略变量的顶层const,如果要想保留顶层const的属性,需要显示声明,这也为变量类型的定义和分析增加了一点难度。 3.1 顶层和底层const 是什么? 对于普通类型int char...等,他们的顶层const = 底层const, 或者说他们不区分顶层和底层.而对于指针而言即包含本身与所指类型的const属性。
(普通变量的const(或引用)永远是顶层const,也就是说,const int 和int const本质都一样) 1)底层const(位于*左侧) 常量指针,表示指向的对象是个常量,不能修改其内容,只能更改指针指向的地址. 其实很好理解,比如 const int *p, 修饰*p是个const常量.而*p是指向对象的内容.所以表示指向对象的内容是常量 但是可以...
一般的,顶层const可以表示任意的对象是常量。 简单理解就是只要一个变量的类型是常变量,就可以理解为顶层 (如const int a = 20) 顶层const能表示的不止是指针,底层const与指针和引用等复合类型有关 区分底层与顶层const int *const p1 =&i;//顶层 1. p1是一个常量指针,指向int类型的对象,即指针本身是个常...
const还可以用于声明常指针,即指针本身是不可变的,但可以修改指向的对象的值。const int* ptr = &value;```4. 修饰常引用 使用const修饰引用可以确保通过引用不会修改原始变量的值。const int& ref = value;```5. 修饰函数的参数 在函数参数列表中使用const关键字可以表明函数不会修改传入的参数值。void My...
顶层const与底层const 对于指针来说,由于其指向另一片内存的特点,有三种不同的const情况,即: 指向常量的指针(const int *) 常量指针(int * const) 指向常量的常量指针(const int *const) 我们一般称符合第一种情况的为具有底层const属性。 符合第二种情况的为具有顶层const属性。
顶层const表示对象本身是个常量,如常量指针是顶层const,底层const表示指针所指的 对象或者引用所引用的对象是个常量,如指向常量的指针是个底层const。 顶层const可表示任意对象是常量,底层const则与指针和引用等符合类型的基本类型部分 有关。 用于声明引用的const都是底层const。
const关键字可以用来修饰指针,有两种方式:常量指针和指针常量。 -常量指针表示指针指向的对象是常量,不能通过指针修改对象的值。 - 指针常量表示指针本身是常量,不能指向其他对象。 10. 顶层const和底层const 顶层const表示整个对象是常量,底层const表示对象的某个部分是常量。
最近在看VC++,看到书里有提这两个概念,学C的时候也有这两个概念,学C++的时候也有顶层const和底层const(这个我懂是懂,但从理解层次上不是那么懂为什么叫做顶层和底层)。所以就是这个知识点很常见啦,但似乎很多人很迷惑,或者说理解着不舒服。于是我的“神逻辑”就来了。
如何区别呢?简单地看,最前面的const表示指针所指向的是一个const对象,而*后面的const表示指针不能指向其他的对象,也就是指针本身是const类型的。这两者也分别被称作底层const和顶层const。如果某个对象是const型,那指向这个对象的指针也必须以const定义在最前面。
类型指示符:auto 和 decltype 当我们无法确定一个变量到底应该使用什么类型的时候,可以使用auto,它会根据变量的初始值推算出变量的类型,所以auto类型的变量一定要有初始值。auto一般会忽略顶层const 保留 底层const。 当我们想使用某个表达式推算出变量的类型,但是又不想使用该表达式作为初始值,可以使用 decltype 它只返...