码迷,mamicode.com
首页 > 其他好文 > 详细

2.4 const限定符

时间:2018-04-05 21:00:12      阅读:134      评论:0      收藏:0      [点我收藏+]

标签:clu   常量指针   报错   底层 const   exp   对象   turn   另一个   strong   

const对象必须初始化

 

赋值对const变量无影响,只要你不改变const变量。

 

2.4.1 const的引用

引用类型必须与所引用对象类型一致。

常量指针:

int *const pt = &a;

指针为常量不可改变。

 

指针常量:

int const *pt = &a;

a为常量不可改变。

 

若a为const型,若一个指针(必须为const类型)指向。(且类型相同)

 

若const型指针pt,指向,则a只需类型与pt相同即可。

 

#include <iostream>

int main(void)
{
    const int a = 5;
    //int *const p = &a;错误 
    //int *p = &a;错误 
    const int *p = &a;//正确 
    return 0;
}
#include <iostream>

int main(void)
{
    int a = 5;
    int *const p = &a;
    //const int *p = &a;都对 
    return 0;
}

 

2.4.3 顶层const

指针本身是一个对象,它又可以指向另一个对象。

 

顶层 const表示指针本身是一个指针,底层 const表示指针所指对象是一个常量。

 

2.4.4 constexpr和常量表达式

const int a = 10;//是常量表达式
const int b = Func();//不是常量表达式

b本身是一个常量,但它的值具体要等到运行时才能获取到,所以不是常量表达式。

 

声明为constexpr的变量一定是一个常量,而且必须用常量表达式初始化。

constexpr int mf = 10;
constexpr int t = mf + 1;
constexpr int sz = size();//只有当size()是一个constexpr函数时,才是一个正确的声明语句

constexpr:告诉编译器我可以是编译期间可知的,尽情的优化我吧。


const:告诉程序员没人动得了我,放心的把我传出去;或者放心的把变量交给我,我啥也不动就瞅瞅。

 

一个constexpr指针的初始值必须是nullptr或者0,或者是存在于某个固定地址中的对象。

 

函数体内定义的变量一般来说并非放在固定内存中,在自定义函数中用constexpr报错,但在主函数中不会。

 

2.4 const限定符

标签:clu   常量指针   报错   底层 const   exp   对象   turn   另一个   strong   

原文地址:https://www.cnblogs.com/Mayfly-nymph/p/8724026.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!