对const的补充---C++初学之路

来源:互联网 发布:尔玛网络 编辑:程序博客网 时间:2024/06/06 04:13

*以下是自学《C++PRIME》以及通过网络的个人学习记录,不保证权威*

今日的插曲:偶然的一次搜索,看到一个问题,一个数组,里面又六个数字,如何让这个数字头尾交换来输出。

看到这个问题,自己第一印象,那就用循环呗,A[0]和A[5]换呗,一次一次的换。然后再去看看其他人是如何做的。

看到一个回答,说递归,然后列了个代码,代码如下:

void re(int* A,int be,int en){    if(be<en)      {          swap(A[be],A[en]);          re(A,++be,--en);      }}

同种代码,让我写,我估计可以写个二十来行,别人能用几行搞定。

意识到:数据结构的作用,所以,C++初学之路再加上数据结构,一起学吧!


好了,进入正题:constexpr,常量表达式,再prime中原句是:保证再编译过程中就能得到计算结果。

这句话对我很重要,至少,从这句话我就能分辨出哪些是常量表达式。

const int max_files=20;const int limit=max_files+1;int staff_size=27;//不是常量表达式const int sz=get_size()j;//sz本身是常量,但是后面的get_size()函数的具体值是直到运行时候才能获取。

constexpr是在C11时候提出的,在网上的资料整理得出:

constexpr:侧重 于编译过程中就能得到计算结果(也是prime中的一句话)

const:则是限定所修饰的常量它是不可以改变的。


对于constexpr的特性,又得到一个新的概念:字面值类型。简单,值显而易见,容易得到。

字面值类型里面包括算术类型,引用,指针等等。那么指针和引用也包括在内,那就又指针和constexpr 引用和constexpr

constexpr修饰的指针,只对指针有效,与指针所指向的对象无关。并且,一个constexpr修饰的指针,初始化必须是nullptr,或者存储固定地址的对象。

也就是将这个指针置于顶层const。

constexpr指针可以指向常量,也可以指向非常量。


那么constexpr这个限定符究竟有什么用?在知乎上有一句话:constexpr不是对象类型,仅仅只是用来确保初始化的是常量表达式。


感觉今天学的东西有点儿少,只学了constexpr.现在是十一点半,继续呗,感觉从指针引用到constexpr,prime上的编程题少了,概念题目多了,

去找找编程题保持下,出发咯。快乐的学习者。


原创粉丝点击