常量表达式函数[通俗易懂]
函数 通俗易懂 表达式 常量
2023-06-13 09:15:00 时间
大家好,又见面了,我是你们的朋友全栈君。
我们可以在函数返回类型前加入关键字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.cn/188236.html原文链接:https://javaforall.cn
相关文章
- python-sort函数[通俗易懂]
- 提升进程权限-OpenProcessToken等函数的用法[通俗易懂]
- oracle最强大函数之一decode函数的使用[通俗易懂]
- rand()函数的用法[通俗易懂]
- dlopen静态库_opensubwnd脚本函数的作用
- 手写节流防抖函数
- JavaScript-匿名函数[通俗易懂]
- 【数据库原理与运用|MySQL数据库】MySQL存储函数和触发器
- A.深度学习基础入门篇[一]:神经元简介、单层多层感知机、距离计算方法式、相似度函数
- C语言文件随机访问fseek()和ftell()函数
- 探索Linux中的异步编程:Fasync函数(linuxfasync)
- 利用Mysql中的视图与函数提高效率(mysql的视图和函数)
- MySQL中的concat函数实现字段拼接(mysql中cancat)
- Oracle NVL函数用法简介(oracle中nvl全程)
- asp之字符串操作函数
- 对JavaScript的eval()中使用函数的进一步讨论
- asp.net字符串、二进制、编码数组转换函数
- javascript笔记String类replace函数的一些事
- 深入PHP购物车模块功能分析(函数讲解,附源码)
- PHP正则替换函数preg_replace和preg_replace_callback使用总结