顶层const(top-level const)和底层const(low-level const)是C++中用于描述const修饰符的两个概念。它们有着不同的含义和应用场景。顶层const---* 号的右边,底层const---* 号的左边。
“左定值,右定向”
-
顶层const:
-
顶层const表示指针或变量本身是常量。它是指针或变量的一部分,限制了指针或变量的修改。
-
顶层const可以用于指针类型或非引用类型变量。
-
顶层const的修饰可以在声明时进行,也可以通过类型别名或模板参数来传递。
示例:
const int num = 10; // 顶层const,num是一个常量不能修改 int* const ptr = # // 顶层const,ptr是一个指向常量的指针,指向的对象不能修改
-
-
底层const:
-
底层const表示指针或引用所指向的对象是常量。它是指针或引用所指向的对象的一部分,限制了对象的修改。
-
底层const只能用于指针类型或引用类型。
-
底层const的修饰可以在声明时进行,也可以通过类型别名或模板参数来传递。
示例:
int num = 10; const int* ptr = # // 底层const,ptr是一个指向常量的指针,指向的对象不能修改 int* const ref = # // 顶层const,ref是一个指向变量的常量指针,指针本身不能修改
-
顶层const和底层const的区别在于它们所修饰的是指针或变量本身还是所指向的对象。顶层const表示指针或变量本身是常量,而底层const表示指针或引用所指向的对象是常量。这两种const修饰符可以组合使用,形成不同的const类型,以满足不同的需求。
举例说明:
const int a;int const a;const int *a;int *const a;
-
int const a和const int a均表示定义常量类型a。
-
const int *a,其中a为指向int型变量的指针,const在 * 左侧,表示a指向不可变常量。(看成const (*a),对引用加const)
-
int *const a,依旧是指针类型,表示a为指向整型数据的常指针。(看成const(a),对指针const)