限定符之const,你知道吗?

2023-01-13 0 353

const名为自表达式限量发行符,用以限量发行某一表达式,以通告C++该表达式是不容修正的。const、volatile和restrict。她们都归属于限量发行符。那时他们就来归纳许多const限量发行符用语。

1、润色基本上的正则表达式

const char n=1; char const n=1;

const润色一般来说在表述的这时候要是赋消费者物价指数,即便const润色的表达式在流程中无法发生改变,你若用它就给他消费者物价指数。

2、润色自表达式操作符与操作符自表达式

const 也能和操作符表达式一同采用,这种能管制操作符表达式这类,也能管制操作符对准的统计数据,const 和操作符一同采用会有三种相同的次序,如下表所示右图。

2.1操作符自表达式:门牌号能被修正,值黎贞,上面这段话同构。

const char* n; char const * n;

2.2自表达式操作符:值能被修正,门牌号黎贞

char* const n;

2.3对准自表达式的常操作符:门牌号和值都是黎贞的

const char* const p;

假如const坐落于星号*的右侧,则const是用以润色操作符所对准的表达式,即操作符对准为自表达式;假如const坐落于representing的右侧,const是润色操作符这类,即操作符这类是自表达式。

比如char const *p,const润色的是*p,*p代表者甚么?代表者p门牌号中的值,因此这句话代表者p门牌号中的值不容被更动。

char* const p,const润色的是p,p代表者甚么?则表示表达式的门牌号,因此这句话代表者p的门牌号不容被更动。

其实我不会去记它是操作符表达式还是表达式操作符,我也记不清楚,总会忘记,但是我能分辨清const润色的是门牌号还是值。

3、润色函数

能用以润色函数的入参,比如常见内存拷贝函数,在第二个参数用了const,则表示在此函数内该值不允许被修正。

void* memcpy(void* _Dst,void const* _Src,size_t _Size);

也能用以润色函数的返回值

char const *fun();

4、思考

从网上看到了一个有趣的文章,说const润色的表达式是真正的黎贞吗?紧接着便写了个Demo证明了起来。大致如下表所示,,结果n的值变成了2,立即推const润色的表达式能被修正。

int main() { const char n = 1;char* p = &n;   *p = 2; }

大家看到了问题所在吗?能从表达式的存储位置分析。

限定符之const,你知道吗?

都读到这里了,点个关注不迷路,也可关注vx公众号typedef

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务