c++中constexpr_define和const定义常量的区别

c++中constexpr_define和const定义常量的区别常量表达式是指值不会改变且在编译过程中就能够得到计算结果的表达式,能在编译时求值的表达式。例1:#include<iostream>usingnamespacestd;intmain(){ constinta1=10;//a1是常量表达式。 constinta2=a1+20;//a2是常量表达…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

常量表达式是指值不会改变且在编译过程中就能够得到计算结果的表达式,能在编译时求值的表达式。

例1:

#include <iostream>
using namespace std;

int main()
{
	
	const int a1 = 10;           // a1是常量表达式。

	const int a2 = a1 + 20;      // a2是常量表达式

	int a3 = 5;                  // a3不是常量表达式

	const int a4 = a3;           // a4不是常量表达式,因为a3程序的执行到达其所在的声明处时才初始化,所以变量a4的值程序运行时才知道。但编译没问题!

	return 0;
}

以上代码可正常编译。

说明了const声明的不一定就是常量表达式!

C++11新标准规定,允许将变量声明为constexpr 类型以便由编译器来验证变量的值是否是常量表达式constexpr 指定符声明可以在编译时求得函数或变量的值,声明为constexpr的变量一定是一个常量,而且必须用常量表达式来进行初始化。

例2:

#include <iostream>
using namespace std;

int main()
{
	
	const int a1 = 10;           // a1是常量表达式。

	const int a2 = a1 + 20;      // a2是常量表达式

	int a3 = 5;                  // a3不是常量表达式

	constexpr int a4 = a3;           // a4不是常量表达式,因为a3程序的执行到达其所在的声明处时才初始化,所以变量a4的值程序运行时才知道。编译报错!

	return 0;
}

constexpr int a4 = a3;  编译将报错!

例3:

c++中constexpr_define和const定义常量的区别

#include <iostream>
using namespace std;

int main()
{
	
	const int a1 = 10;           // a1是常量表达式。
	const int a2 = a1 + 20;      // a2是常量表达式
	int a3 = 5;                  // a3不是常量表达式
	const int a4 = a3;           // a4不是常量表达式,因为a3程序的执行到达其所在的声明处时才初始化,所以变量a4的值程序运行时才知道。编译报错!

	char arr1[a2];   // 没问题
	char arr2['y'];  // 没问题,'y'的ASCII码为121,相当于 char arr2[121];

	char arr3[a4];   // 编译报错,因为a4不是常量表达式


	return 0;
}

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/189108.html原文链接:https://javaforall.net

(0)
上一篇 2026年4月14日 下午5:31
下一篇 2026年4月14日 下午5:37


相关推荐

  • 施密特正交化几何解释

    施密特正交化几何解释施密特正交化几何解释

    2022年4月24日
    63
  • win10关闭端口占用[通俗易懂]

    win10关闭端口占用[通俗易懂]查看win10所有占用端口公式:查看所有:netstat-ano查看对应端口:netstat-ano|findstr"9004"关闭端口:任务管理器中的详细信息对应的PID就是占用的端口关闭即可命令行关闭端口:taskkill-PID进程号-F进程号为19216…

    2022年7月20日
    20
  • kettle工具的简单使用

    kettle工具的简单使用1.使用kettle抽取CSV文件通过Kettle工具抽取CSV文件csv_extract.csv中的数据并保存至数据库extract的数据表csv中。(1)、创建一个转换通过使用Kettle工具,创建一个转换csv_extract,并添加“CSV文件输入”控件、“表输出”控件以及Hop跳连接线,具体如图所示。(2)、配置CSV输入插件双击“CSV文件输入”控件,进入“CSV文件输入”界面。完成配置。单击【浏览】按钮,选择要抽取的文件csv_extract.c…

    2022年10月16日
    4
  • ireport使用教程视频_proe拖动图形

    ireport使用教程视频_proe拖动图形iReport使用教程【原创】iReport与JasperReport简介1.1  简介JasperReport是报表的引擎部分,界面设计是用iReport。为什么选择这两个软件呢?因为这两个软件都是开源的,即免费的(虽然某些文档收费,但是磨灭不了我们使用它的理由)。JasperReport是一个报表制作程序,用户按照它制定的规则编写一个XML文件,然后得到用户需要输出的

    2025年10月23日
    5
  • kubernetes k8s删除namespaces 时一直处在Terminating的问题解决

    kubernetes k8s删除namespaces 时一直处在Terminating的问题解决

    2021年5月13日
    149
  • 指针函数和函数指针「建议收藏」

    指针函数和函数指针「建议收藏」概述指针函数和函数指针是C语言里两个比较绕的概念。但是不仅面试题爱考,实际应用中也比较广泛。很多人因为搞不清这两个概念,干脆就避而远之,我刚接触C语言的时候对这两个概念也比较模糊,特别是当指针函数、函数指针、函数指针变量、函数指针数组放在一块的时候,能把强迫症的人活活逼疯。其实如果理解了这些概念的本质,是不需要死记硬背的,理解起来也比较容易。指针函数指针函数:顾名思义,它的本质是一个函数…

    2022年6月22日
    33

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号