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

相关内容

热门资讯

保存时出现了1个错误,导致这篇... 当保存文章时出现错误时,可以通过以下步骤解决问题:查看错误信息:查看错误提示信息可以帮助我们了解具体...
汇川伺服电机位置控制模式参数配... 1. 基本控制参数设置 1)设置位置控制模式   2)绝对值位置线性模...
不能访问光猫的的管理页面 光猫是现代家庭宽带网络的重要组成部分,它可以提供高速稳定的网络连接。但是,有时候我们会遇到不能访问光...
表格中数据未显示 当表格中的数据未显示时,可能是由于以下几个原因导致的:HTML代码问题:检查表格的HTML代码是否正...
本地主机上的图像未显示 问题描述:在本地主机上显示图像时,图像未能正常显示。解决方法:以下是一些可能的解决方法,具体取决于问...
表格列调整大小出现问题 问题描述:表格列调整大小出现问题,无法正常调整列宽。解决方法:检查表格的布局方式是否正确。确保表格使...
不一致的条件格式 要解决不一致的条件格式问题,可以按照以下步骤进行:确定条件格式的规则:首先,需要明确条件格式的规则是...
Android|无法访问或保存... 这个问题可能是由于权限设置不正确导致的。您需要在应用程序清单文件中添加以下代码来请求适当的权限:此外...
【NI Multisim 14...   目录 序言 一、工具栏 🍊1.“标准”工具栏 🍊 2.视图工具...
银河麒麟V10SP1高级服务器... 银河麒麟高级服务器操作系统简介: 银河麒麟高级服务器操作系统V10是针对企业级关键业务...