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; }大家看到了问题所在吗?能从表达式的存储位置分析。
都读到这里了,点个关注不迷路,也可关注vx公众号typedef