C++中constexpr函数
1 简介
constexpr函数指的是在编译的时候就能得到其返回值的函数,也就是说编译器将constexpr函数直接转换成其返回值,因此,constexpr函数都是被隐式地定义为内联函数。使用constexpr关键字来修饰constexpr函数。
2 使用方法
有如下代码:
constexpr int myFunc()
{return 1;
}
constexpr int i = myFunc() * 4;
此时,编译器会将myFunc()函数用其返回值1来代替,在编译时就可知i的值是4。
3 注意事项
3.1 constexpr函数的返回值类型必须是字面值类型
int g_i = 1;
constexpr int myFunc()
{return g_i;
}
此时的返回值g_i不是字面值类型,因此报错信息为“error C3256: “g_i”: 变量使用不生成一个常量表达式”。
3.2 constexpr函数的形参可以是非常量,但是实参必须是常量
constexpr int myFunc(int i)
{return i;
}
constexpr int i = myFunc(1) * 4;
此时,myFunc()函数的实参是常量,在编译时可以直接被替换为1,程序不报错。
int j = 2;
constexpr int i = myFunc(j) * 4;
此时,myFunc()函数的实参是非常量,程序报错信息为“error C2131: 表达式的计算结果不是常数”,将j定义为const int则不报错。
3.3 函数体中必须有且只有一条return语句
如下代码
constexpr int myFunc(int i)
{int j;return i;
}
程序的报错信息为“error C3250: “j”: 不允许在“constexpr”函数体中进行声明”。
C++中constexpr函数相关推荐
- constexpr函数
有点难理解权且记住,使用才会体会其中真正的差别. 常量表达式的概念:在编译期就可以计算出结果的表达式. 那么为什么要用常量表达式呢,用常量表达式会有什么好处: 1.允许一些计算只在编译时进行一次,而不 ...
- C++ 11 新特性: constexpr变量和constexpr函数
constexpr变量 字面值类型包括算术类型.引用.指针.枚举和数据成员都是字面值类型的聚合类. 聚合类的定义: 所有成员都是public的. 没有定义任何构造函数. 没有类内初始值 ...
- [C++]constexpr函数
constexpr函数(constexpr function)是指能用于常量表达式的函数.定义constexpr函数的方法与其他函数类似,不过要遵循几项约定:函数的返回类型及所有形参的类型都得是字面值 ...
- [C/C++] constexpr函数
常量表达式是指值不会改变并且在编译过程就能够得到计算结果的表达式.显然,字面值属于常量表达式,用常量表达式初始化的 const 对象也是常量表达式.如下: const int max_num = 20 ...
- 《C++ Primer 第五版》(第6.3~6.7节)——返回指向数组/函数的指针,函数重载,默认形参、inline函数和constexpr函数
1.返回指向数组/函数的指针 顾名思义,就是函数返回值为指向数组/函数的指针. 数组的性质:不能被拷贝,函数也不能返回数组.但可以返回数组指针/引用,声明一个返回数组指针的函数,有四种方式,一种是直接 ...
- 浅析 JavaScript 中的 函数 uncurrying 反柯里化
柯里化 柯里化又称部分求值,其含义是给函数分步传递参数,每次传递参数后部分应用参数,并返回一个更具体的函数接受剩下的参数,这中间可嵌套多层这样的接受部分参数函数,直至返回最后结果. 因此柯里化的过程是 ...
- 计算机函数模式的用处是啥,请问怎么理解计算机中的函数?
你的理解有点外行看热闹的意思,呵呵. 代码本身就是抽象的,所以"计算机中的函数是一种对代码进行抽象的方式"不能说不对,但是也和没说一样.至于"我们使用抽象出来的函数,而不 ...
- Matlab中bwmorph函数的使用
Matlab中bwmorph函数的使用 Matlab中提供了一个基于形态学的处理函数,即以膨胀.腐蚀等操作为基础,其语法格式如下: bw2=bwmorph(bw1,operation,n); 其中bw ...
- 结构体中定义函数指针
结构体指针变量的定义,定义结构体变量的一般形式如下: 形式1:先定义结构体类型,再定义变量 struct结构体标识符 { 成员变量列表;- }; struct 结构体标识符 *指针变量名; 变量初始化 ...
最新文章
- 以application/json 方式提交 然后用在php中读取原始数据流的方式获取 在json_encode...
- java.lang.ClassNotFoundException: Didn't find class com.tzutalin.dlibtest.MainActivity_
- 【Android UI设计与开发】第16期:滑动菜单栏(一)
- 服务器指纹识别之 DNS TXT
- ElementUI项目中怎样引用Jquery
- java编写sql语句,java实现简单的给sql语句赋值的示例
- 【nodejs原理源码赏析(1)】Express中间件系统的基本实现
- CLR via C# 边读边想 03 - 本地程序集和强命名程序集
- butterfly配置 hexo_Hexo博客之butterfly主题优雅魔改系列(持续更新)
- c语言ld怎么声明,ld C语言编程开发
- 迅捷路由器设置AP模式
- PDF如何翻译?看完这个方法就学会了
- 阿里云盘迎来了第三方客户端小白羊版
- Java常用类学习笔记
- MacOS配置C++开发环境
- Linux命令 - su命令
- 腾讯音乐娱乐集团成功纽交所上市 中国音乐行业新起点
- Django 开发框架学习(一)
- 23考研机械复试面试 常见问答问题汇总,机械本科知识专业面试最全攻略!!
- 爬取豆瓣评分前50的电影信息
热门文章
- 在Redhat 7下安装MySQL数据库 和 配置
- JavaScript 教程(二) 1
- css股票曲线图图解,如何看懂股票曲线图,一文搞懂这些曲线所代表的含义!
- 模拟接听电话的方法,兼容华为android5.0以上设备
- Java+MySQL+查询操作
- 面试面经|Java面试kafka面试题
- python一个文件夹的文件移动到另外一个文件夹
- .\Objects\demo.axf: error: L6002U: Could not open file .\objects\core_cm3.o: No such file or directo
- 施努卡:CCD视觉检测 CCD视觉检测设备厂家
- 2023 首发 最新聚支付系统源码 无后门 支持易支付和码支付