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

常量表达式函数[通俗易懂]我们可以在函数返回类型前加入关键字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表达式语句就不能包含运行时才能确定的变量或函数,只有这样,编译器才能在编译时进行常量表达式函数的额值计算。

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • Android开发环境搭建

    Android开发环境搭建Android开发环境搭建可以分为以下四步:第一步、安装JDK;第二步、安装Eclipse;第三步、下载并安装AndroidSDK;第四步、为Eclipse安装ADT插件下面详细介绍。第一

  • 分布式存储系统sheepdog

    分布式存储系统sheepdog

  • SpringMVC框架–学习笔记(上)

    SpringMVC框架–学习笔记(上)

  • java面向对象三大特性「建议收藏」

    java面向对象三大特性「建议收藏」一、面向对象的概念面向对象是一种符合人类思维习惯的编程思想。现实生活中存在各种形态不同的事物,这些事物之间存在着各种各样的联系。在程序中使用对象来映射现实中的事物使用对象的关系来描述事物之间的联系,这种思想就是面向对象。提到面向对象,自然会想到面向过程,面向过程就是分析解决问题所需要的步骤,然后用函数把这些步骤一一实现,使用的时候一个一个依次调用就可以了。面向对象则是把解决的问题按照一定规则划分为多个独立的对象,然后通过调用对象的方法来解决问题。当然,一个应用程序会包含多个对象,通过多个对象的相互配合来

  • critic法计算_基于CRITIC法和变异系数法的导线网测量平差定权 2[通俗易懂]

    critic法计算_基于CRITIC法和变异系数法的导线网测量平差定权 2[通俗易懂]基于CRITIC法和变异系数法的导线网测量平差定权杨腾飞,施昆,汪奇生(昆明理工大学国土资源工程学院,云南昆明650093)【摘要】CRITIC与变异系数定权都是一种客观的定权方法,能克服常规经验定权的不足。本文将这两种客观定权方法引入导线网平差中,并与常规定权方法进行比较。由应用实例可验证其优越性。【关键词】客观定权;导线网;CRITIC;变异系数【中图分类号】【文献标识码】【文章编号】Trav…

  • intellij idea上传项目到码云

    intellij idea上传项目到码云

发表回复

您的电子邮箱地址不会被公开。

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