constexpr 和 常量表达式
创始人
2024-05-28 23:48:54
0

👀👀常量表达式

常量表达式是指值不会改变并且在编译过程就能得到计算结果的表达式。
字面值属于常量表达式,用常量表达式初始化的const对象也是常量表达式。
那么是什么来就决定是不是常量表达式呢?一个对象是不是常量表达式主要看它的数据结构和初始值。
例:
const int max = 20; // max是常量表达式
const int maxx = max+1; //maxx是常量表达式
int litter = 10; //litter 不是常量表达式
const int sz = get-size(); //sz 不是常量表达式
注释:
litter 虽然是一个字面常量但是它的类型只是普通的类型int,所以不是常量表达式。
sz 虽然是一个常量(const)但是它的具体值只能运行时才能获取,所以不是常量表达式。

👀👀constexpr常量

c++11新标准规定,允许将变量声明为constexpr类型,用来由编译器来验证变量的值是否为一个常量表达式。
声明constexpr的变量一定是一个常量,而且必须用常量表达式初始化:
constexpr int mf =20; // 20是常量表达式
constexpr int litter = mf+1; //mf+1 是常量表达式
constexpr int max= size(); //只有当size是一个constexpr函数时才是一条正确的声明语句。
不能使用普通函数作为constexpr变量的初始值。
一般来说,如果认定变量是一个常量表达式,那就把它声明成constexpr类型。

👀👀指针和constexpr

在constexpr声明中如果定义了一个指针,限定符constexpr仅对指针有效,与指针所指对象无关:
const int *p =null; // p是一个指向整形常量的指针
constexpr int *q= ptr; // q是一个指向整数的常量指针
constexpr指针既可以指向常量也可以指向一个非常量:
constexpr int *p =null; //p是一个指向整数的常量指针,其值为空。
int i =1;
constexpr int j =2; // j的类型是整形常量
// i ,j 都必须定义在函数之外
constexpr const int *p =&j; //p是常量指针,指向整形常量 j
constexpr int *p1= &i;// p1是常量指针,指向整数i

相关内容

热门资讯

【NI Multisim 14...   目录 序言 一、工具栏 🍊1.“标准”工具栏 🍊 2.视图工具...
银河麒麟V10SP1高级服务器... 银河麒麟高级服务器操作系统简介: 银河麒麟高级服务器操作系统V10是针对企业级关键业务...
不能访问光猫的的管理页面 光猫是现代家庭宽带网络的重要组成部分,它可以提供高速稳定的网络连接。但是,有时候我们会遇到不能访问光...
AWSECS:访问外部网络时出... 如果您在AWS ECS中部署了应用程序,并且该应用程序需要访问外部网络,但是无法正常访问,可能是因为...
Android|无法访问或保存... 这个问题可能是由于权限设置不正确导致的。您需要在应用程序清单文件中添加以下代码来请求适当的权限:此外...
北信源内网安全管理卸载 北信源内网安全管理是一款网络安全管理软件,主要用于保护内网安全。在日常使用过程中,卸载该软件是一种常...
AWSElasticBeans... 在Dockerfile中手动配置nginx反向代理。例如,在Dockerfile中添加以下代码:FR...
AsusVivobook无法开... 首先,我们可以尝试重置BIOS(Basic Input/Output System)来解决这个问题。...
ASM贪吃蛇游戏-解决错误的问... 要解决ASM贪吃蛇游戏中的错误问题,你可以按照以下步骤进行:首先,确定错误的具体表现和问题所在。在贪...
月入8000+的steam搬砖... 大家好,我是阿阳 今天要给大家介绍的是 steam 游戏搬砖项目,目前...