美文网首页
C++ 顶层const与底层const总结

C++ 顶层const与底层const总结

作者: GThyton | 来源:发表于2017-09-25 22:09 被阅读0次

C++中顶层const与底层const在使用中区分还是挺大的,比较容易搞混,所以单独总结一下。

1.什么是顶层const与底层const

简单的说顶层const就是const定义的变量本身是一个常量,底层const就是const定义的变量所指向的对象是一个常量。

举个例子:

charc = ‘c’;

char*const p1 = &c; (1)

constchar *p2 = &c; (2)

constchar p3 = 'c'; (3)

(1)表达式中p1是一个常量指针,const施加在p1这个指针上,所以p1这个变量就不能在改变了,所以不能再对p1进行赋其他值了,但是p1这个指针可以通过解引用的方式来改变其指向的值,所以表达式(1)对应const是顶层const。

(2)表达式中p2这个指针所指的对象是一个常量,就是说不能通过对p2进行解引用来改变p2所指向的值,但是p2这个指针却是可以改变指向的,所以表达式(2)的const属于底层const

(3)表达式中p3这个变量的值不能再被改变,所以(3)中的这个const属于顶层const。

2.顶层const与底层const用途

在函数重载时顶层const与底层const会很容易让人迷惑。同样举个例子说一下吧。

在函数重载时要满足函数名相同函数参数不同,考虑以下这种状况。

voidtest(char *p);        (1)

voidtest(char * const p);  (2)

voidtest(const char *p);  (3)

考虑上面三个表达式,哪两个才是真正的函数重载?

其实区分函数重载,要以调用者的身份来看或许更能说明问题。

底层指针常量需要的实参是一个常量,一个拥有顶层const的形参无法与另一个没有顶层的const形参区分开来。其实编译器在区分重载函数时会自动屏蔽顶层const。

所以上述三个表达式只有(1)(3)或(2)(3)才能组成真正的重载函数。

相关文章

  • C++ 顶层const与底层const总结

    C++中顶层const与底层const在使用中区分还是挺大的,比较容易搞混,所以单独总结一下。 1.什么是顶层co...

  • C++ decltype 与 auto关键字

    顶层const 与 底层const 指针本身是不是常量 和 指针所指的是不是一个常量 是2个问题。顶层const ...

  • C++学习笔记——变量与数据类型

    const 顶层const:表示指针本身是一个常量。 底层const:表示指针所指对象是一个常量。 推广:顶层co...

  • 底层const和顶层const

    忽略顶层const int *const p1=&i;//不能修改p1;const 是顶层const const ...

  • 顶层const和底层const

    指针是一个对象,占据内存空间,而指针本身可以指向另一个对象,这就导致指针是常量和指针指向的对象是常量是两个不同的概...

  • 顶层const

    说到顶层const(top-level const)在c++ primer 第五版里面有介绍到 用名词顶层cons...

  • 常应用问题

    C++ const 常指针:const int* ptr;const 修饰int*,ptr指向整形常量,ptr指向...

  • 网易云课堂(Boolan)C++ 第五周笔记

    CONST C++中只有const对象调用对象内非const函数会不成功,所以能加const的尽量加const,而...

  • C++中的内联函数

    1、常量与宏回顾 C++中的const常量可以替代宏常数定义,如: const int A = 3; <===>...

  • const限定符(四)

    顶层const和底层const 上一节已经说过,指针本身就是一个对象,所以指针只想一个常量对象和指针本身是否是一个...

网友评论

      本文标题:C++ 顶层const与底层const总结

      本文链接:https://www.haomeiwen.com/subject/mjcjextx.html