const

pointer to const:指向常量的指针(被指向的对象是常量)c++

const pointer:常量指针(指针自己是常量)函数

 

     [对被指向对象的修饰] * [指针自己的修饰]spa

====================================================
指针

指向常量的指针:被指向的对象是常量,修饰的是被指向的对象。c++11

不能用于修改其所指对象的值(被指向的对象是常量)。对象

const int s32val = 5;//常量

const int *pint = &s32val;//const在*前,那么说明被指向的对象是const int型。*pint是不能改变。(pint是能够改变的,可是改变没有意义。)

 s32val是常量,pint是指向常量的指针。blog

 

例外:容许一个指向常量的指针  指向  一个很是量对象。get

指向常量的指针也没有规定其所指的对象必须是一个常量。只是规定不能经过该指针改变指向对象的值。it

 

------------------------------------------------------------编译

常量指针:指针自己是常量,指针不能改变。和常量定义意义,必须初始化

int x = 10;

int *const pint = &x;//const在*后面,修饰pint,因此pint是常量,不能改变,可是*pint是能够改变的。

 能够*pint = 12;这样的方式去修改,可是不能pint++,这类操做。

 

------------------------------------------------------------

指向常量的常量指针

 

const int *const pint = &x;

 

 

==========

top-level const:指针自己是常量(*右边)

low-level const:指向的对象是常量(左边*)

 

记忆方法,尊右为顶。

 

==========

c++11的新规定:

constexpr类型。

常量表达式:不会改变而且在编译过程就获得计算结果的表达式。

 

const int max=30;

const int mmax = max+1;

是常量表达式。

 

int unstat = 11;

int getval = val();

不是常量表达式,unstat是普通int类型,val()不是在编译阶段就能肯定的值。

 

用constexpr验证:

constexpr int mf = 20;

constexpr int limit = mf+1;

constexpr int sz = getval();只有getval是一个constexpr函数,才是正确声明。

相关文章
相关标签/搜索