常量表达式函数[通俗易懂]

常量表达式函数[通俗易懂]我们可以在函数返回类型前加入关键字constexpr来使其成为常量表达式函数,但并非所有的函数都有资格成为常量表达式函数。事实上,常量表达式函数的要求非常严格,总结如下:函数体只有单一的return返回语句。 函数必须返回值,不能是void函数。 在使用前必须已有定义。 return返回语句表达式中不能使用非常量表达式的函数、全局数据,且必须是常量表达式。由于比较好理解,这里不多做解释…

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

Jetbrains全系列IDE稳定放心使用

我们可以在函数返回类型前加入关键字constexpr来使其成为常量表达式函数,但并非所有的函数都有资格成为常量表达式函数。事实上,常量表达式函数的要求非常严格,总结如下:

  • 函数体只有单一的return返回语句。
  • 函数必须返回值,不能是void函数。
  • 在使用前必须已有定义。
  • return返回语句表达式中不能使用非常量表达式的函数、全局数据,且必须是常量表达式。

由于比较好理解,这里不多做解释,分别举一个例子:

1.函数体只有单一的return返回语句

constexpr int GetConstOne()
{
	int i = 10;	 //违反第一条规则
	return 5;
}

2.函数必须返回值,不能是void函数

constexpr void GetConstTwo() 
{
	//函数必须有返回值,因为无法获得常量的常量表达式是不被认可的
}

3.在使用前必须定义

constexpr int GetConstThree();
int nValue = GetConstThree();                   //没问题,
constexpr int nConstValue = GetConstThree();    //有问题
constexpr int GetConstThree()
{
    return 1;
}

这里我们声明了一个常量表达式函数GetConstThree,在定义函数之前,我们定义了变量nValue和常量表达式nConstValue,在定义nValue时,编译器将GetConstThree()函数转化为一个函数调用,而“函数调用”是指的运行时的过程,这时对于GetConstThree这样的编译时函数已经获得了值,所有所没有问题。而nConstValue要求使用GetConstThree的值,但此值还没有进行编译时计算,所以有问题。

4.return返回语句表达式中不能使用非常量表达式的函数、全局数据,且必须是常量表达式。

constexpr int GetConstFour(int x)
{
	x = 1;
	return x;
}

这样做的意义非常明显,即如果我们要使得GetConstFour()成为一个编译时的常量,那么其return表达式语句就不能包含运行时才能确定的变量或函数,只有这样,编译器才能在编译时进行常量表达式函数的额值计算。

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

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • js和html全局变量,JavaScript全局变量与局部变量

    js和html全局变量,JavaScript全局变量与局部变量原文:深入理解JavaScript的变量作用域在学习JavaScript的变量作用域之前,我们应当明确几点:JavaScript的变量作用域是基于其特有的作用域链的。JavaScript没有块级作用域。函数中声明的变量在整个函数中都有定义。1、JavaScript的作用域链首先看下下面这段代码:varrain=1;functionrainman(){varman=2;function…

    2022年6月12日
    33
  • 网关 gateway_gateway网关集群

    网关 gateway_gateway网关集群GateWay网关管理GateWayCloud全家桶中有个很重要的组件就是网关,在1.x版本中都是采用的Zuul网关;但在2.x版本中,zuul的升级一直跳票,SpringCloud最后自己研发了一个网关替代Zuul,那就是SpringCloudGatewayGateway是在Spring生态系统之上构建的API网关服务,基于Spring5,SpringBoot2和ProjectReactor等技术。Gateway旨在提供一种简单而有效的方式来对API进行路由,以及提供一些强大的过滤

    2022年10月11日
    1
  • mp3格式音频文件结构解析图_mp3文件结构

    mp3格式音频文件结构解析图_mp3文件结构一、概述Layer-3音频文件,MPEG(MovingPictureExpertsGroup)在汉语中译为活动图像专家组,特指活动影音压缩标准,MPEG音频文件是MPEG1标准中的声音部分,也叫MPEG音频层,它根据压缩质量和编码复杂程度划分为三层,即Layer-1、Layer2、Layer3,且分别对应MP1、MP2、MP3这三种声音文件,并根据不同的用途,使用不同层次的编码

    2025年6月9日
    4
  • Java安全之Fastjson内网利用

    Java安全之Fastjson内网利用0x00前言在打Fastjson的时候,基本上都是使用JNDI注入的方式去打,也就是JdbcRowSetImpl链分析的链去打,但是遇到一些不出网的情况

    2021年12月13日
    116
  • 点击图标打不开软件_pycharm安装完没有图标

    点击图标打不开软件_pycharm安装完没有图标情况说明:Pycharm在之前都可以正常打开,但是在我修改了它的安装存储目录后,点击图标就打不开了,而且没有任何反应!条件说明:我下载的pycharm是官方网站下载的。如何解决不可打开问题:步骤1.进入你的安装pycharm的bin文件,找到pycharm.exe.vmoptions和pycharm64.exe.vmoptions步骤2:分别将其打开,将里面的jar…

    2022年8月27日
    2
  • 中国电信广东DNS服务器[通俗易懂]

    中国电信广东DNS服务器[通俗易懂]1中国电信广州用户(包括番禺、增城、从化等区电信用户)“首选DNS服务器”为:61.144.56.100“备用DNS服务器”为:61.144.56.101这个经过测试确实是目前最快最有效的DNS服务器。2中国电信深圳用户“首选DNS服务器”为:202.96.128.86“备用DNS服务器”设置为:202.96.128.1663中国电信广东省其他地区用户(包括佛山、中山、江…

    2022年7月11日
    78

发表回复

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

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