2.4 const限定符

Posted mayfly-nymph

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2.4 const限定符相关的知识,希望对你有一定的参考价值。

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限定符的主要内容,如果未能解决你的问题,请参考以下文章

2.4 const限定符

2.4:const限定符

const限定符

请澄清 const 限定符传播

在下面的函数的返回中添加 const 限定符有啥重要性?

C++杂谈const限定符与const指针