【C++ Primer | 06】 函数
contexpr函数
const用于运行期常量,constexpr用于编译期常量
• [test1.cpp]
#include <iostream>
using namespace std; constexpr int screen(int x) // constexpr
{
return x;
} int main()
{
const int x = ; // const,是常量表达式,因为值不会发生改变
constexpr int z = screen(x); // constexpr
cout << z << endl;
return ;
}
• [test2.cpp]
#include <iostream>
using namespace std; constexpr int screen(int x)
{
return x;
} int main()
{
int x = ; // 不是常量表达式,因为值会改变
int z = screen(x);
cout << z <<endl;
return ;
}
(1)[test1.cpp] 符合constexpr函数的常规用法,即函数的返回类型以及所有的形参类型必须是字面值类型(字面值类型即编译过程就能得到结果的类型)。此时,如果将 const int x = 0 变为int x = 0 就会报错,因为screen函数的用在一个需要常量表达式的上下文中(constexpr类型的变量必须用常量表达式初始化),编译器在编译的过程中会检查函数的返回值是不是常量表达式,如果不是就会报错。
(2)[test2.cpp] 表示constexpr函数可以返回非常量表达式,编译的过程没有报错,原因是screen函数并没有用在一个需要常量表达式的上下文中,编译器正在编译的过程中不会去检查该函数的返回值,也就不会报错。
(3)作为补充,需要注意的是constexpr函数必须有return语句。
• 如果在不需要常量表达式的上下文,如:int z = screen(x);可以不返回常量表达式,此时编译器不会检查函数的结果是否会返回常量表达式。
• 如果是在需要常量表达式的上下文中,如: constexpr int z = screen(x);那么,constexpr函数必须可以返回常量表达式。此时编译器会去检查函数返回的结果是不是常量表达式,如果不是,就会报错。
函数指针
6.7节练习
#include<iostream>
#include<vector>
using namespace std; int func1(int a, int b)
{
return a + b;
} int func2(int a, int b)
{
return a - b;
} int func3(int a, int b)
{
return a * b;
} int func4(int a, int b)
{
return a / b;
} void computer(int a, int b, int(*p) (int, int))
{
cout << p(a, b) << endl;
} int main()
{
int i = , j = ;
decltype(func1) * p1 = func1, *p2 = func2, *p3 = func3, *p4 = func4;
vector<decltype(func1) *> vf = { p1, p2, p3, p4 };
for (auto c : vf)
computer(i, j, c);
system("pause");
return ;
}
【C++ Primer | 06】 函数的更多相关文章
- Node.js 教程 06 - 函数
前言: 本篇介绍的是Node.js中的函数,相对于上一篇会简单一点,其实和我们Javascript中的function无异. 好了,废话不多说了,我们进入正题吧. Node.js函数: [示例1:创建 ...
- 【C语言学习】-06 函数
函数分类.函数声明和定义.函数调用,形参实参.函数嵌套调用
- C++Primer学习——函数
编译器能以任意顺序对形参进行求值 函数的返回类型不能是数组类型和函数类型. 函数开始时为形参分配内存,一旦函数结束,形参也就被销毁了. 如果弄成静态局部变量,那么回到程序终止结束时才被销毁. void ...
- C++ Primer 笔记——函数
1.函数内的局部静态对象在程序的执行路径第一次经过对象定义语句的时候初始化,并且直到程序终止才被销毁,在此期间即使对象所在的函数结束执行也不会对它有影响. size_t get_count() { ; ...
- python 06函数
python中函数定义方法: def test(x): "The function definitions" x+=1 return x def:定义函数的关键字test:函数名( ...
- C++ primer ch6 函数基础-1
1.形参和实参:编译器并没有规定实参的求值顺序. 类似下面的代码,其行为是未定义的: ; printf("%d %d\n",++i,++i); 2.变量的初始化: 如果内置类型的变 ...
- PL/SQL 06 函数 function
--函数 create or replace function 函数名称(参数1 类型1,参数2 类型2,...) return 数据类型as 变量.常量声明;begin 代码;end; cr ...
- golang(06)函数介绍
原文链接 http://www.limerence2017.com/2019/09/11/golang11/#more 函数简介 函数是编程语言中不可缺少的部分,在golang这门语言中函数是一等公民 ...
- Day5 - 06 函数的参数-命名关键字参数
引子:对于关键字参数,调用时可以传入任意个不受限制的关键字参数,至于到底传入了哪些,就需要在函数内部通过[函数里定义的关键字参数]检查,例子里就是通过otherinfo检查. >& ...
随机推荐
- python---redis在windows安装以及测试
手册以及下载地址http://www.runoob.com/redis/redis-install.html,以及启动和测试 启动服务端(进入项目目录下: redis-server.exe redis ...
- CM记录-优化配置解决Reduce卡顿问题
CDH大数据集群问题问题分析与解决方案 问题描述:Hive提交任务,一直卡在Reduce阶段,进度缓慢. 日志分析:NodeManager节点产生的usercache所在分区空间不足,导致进程异常退出 ...
- HDU - 5419 Victor and Toys(组合计数)
http://acm.hdu.edu.cn/showproblem.php?pid=5419 题意 n个物品,标号1-n,物品i有权值wi.现在有m个区间[l,r],从中任意选三个区间i,j,k,求物 ...
- python学习笔记9--日志模块logging
我们在写程序的时候经常会打一些日志来帮助我们查找问题,这次学习一下logging模块,在python里面如何操作日志.介绍一下logging模块,logging模块就是python里面用来操作日志的模 ...
- Bootstrap的响应式后台管理模板推荐
1.Admin LTE 该模版开源免费.已用到项目中,客户评价说UI很好看... AdminLTE - 是一个完全响应式管理模板.基于Bootstrap3的框架.高度可定制的,易于使用.支持很多的屏幕 ...
- 02、@PropertySource指定配置文件的属性映射到JavaBean属性
零.@PropertySource 功能类似于 <context:property-placeholder location="classpath*:/config/load.prop ...
- zabbix 源码分析 another/first network error wait for 15s seconds 出现原因及调优建议
在监控设备的时候,在server端的日志中有时候会见到类似another network error, wait for 15s seconds的异常,今天我们看下这个问题的出现原因和解决方案: 问题 ...
- [USACO]地震 (二分答案+最优比率生成树详解)
题面:[USACO 2001 OPEN]地震 题目描述: 一场地震把约翰家的牧场摧毁了, 坚强的约翰决心重建家园. 约翰已经重建了N个牧场,现在他希望能修建一些道路把它们连接起来.研究地形之后,约翰发 ...
- B - Fuzzy Search (FFT)
题目链接:https://cn.vjudge.net/contest/281959#problem/B 题目大意:给你n,m,k.然后输入两个字符串,n代表第一个字符串s1,m代表第二个字符串s2,然 ...
- d 属性: 赋予字段执行动作的能力
1.对只读属性误解 property AppSetting: ISuperobject read fAppSetting;当看到 AppInfo.AppSetting.D['lastLat'] := ...