const 常量_C++:Const的秘密

Const int bufsize = 512;

const的值得特定是,一旦创建了这个值之后,const必须进行初始化。

不能只光声明。

Extern const int bufsize = fcn();

Extern const int bufsize;

因为const是在编译期间发生的,在这个过程中,它会被做一个强行的替换。

因此这个作用域只在本文件中。但是程序员懒啊,他们想在更多文件见共享一个值。

要用的时候只要声明一下就可以了。

这个时候就是上述例子了,第一句在cc文件中运行,第二句在其他头文件中运行。

对常量的引用:

Const int &r1 = ci;

这个r1是一个常量。

常量引用

这个常亮引用的特点是允许绑定表达式。

而普通的变量是不允许的。

引用,其目的是为了修改目标变量。

但如果是在类型不符合的情况下 ,可能会出现例外。

典型情况就是 const int &ri = temp;

Const int temp = dval;

Const int &ri =temp;

指向常量的指针,和指向常量的引用,他们的意思其实不是说,指向的东西必须是一个常量,不能动。

而是说透过这个指针,透过这个引用,他指向的东西不能用。

Const double *const pip;

Pip 是一个指向常量对象的常量指针。

Double *const pip,值得是pop指向的那个位置。

顶层const:表示的是:指针本身是个常量

底层const指的是,指针所指的对象是一个常量。

顶层const 和 底层const。顶层const指针本身是个常量,底层const它的对象是一个常量。

所以在处理底层const的时候,我们必须要建立一个const

Const int &r2 = I;

Constexpr 它解决的问题是,初始值到底是不是常量表达式

比如 const int sz = get_size();

最典型的是这种情况,只能在运势是,慈恩给你获得常亮表达式。但也能这么写

比如编译器检测一个东西究竟是不是一个常量表达式,就会很难。

那为了更严格的限定。constexpr就出现了。

constexpr的表达式一定要是一个constexpr函数才行。

constexpr提到的,它指向的东西,是必须受到严格限制的,函数内部的值就会随机内存地址,所以不能用constexor。

Const int *p = nullptr;

Constexpre int *q = nullptr;

两个是完全不同的,consterpre 是一个常量指针,指针自己指向的内存空间不能变。

所以 constexpr只能定义在函数体外。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值