C++ 函数

函数三要素:名称、参数、返回值

定义

返回类型、函数名、形参列表内、函数体

类型

C++中,所有的函数和变量都必须有类型

C

int f();//返回值为int,接受任意参数的函数

int f(void);//返回值为int的无参函数

C++

int f();和int f(void);//具有相同的意义,都表示返回值为int的无参函数

默认参数和占位参数

通常情况下,函数在调用时,形参从实参那里取得值。对于多次调用同一函数同一实参时,C++给出了更简单的处理方法。给形参以默认值,这样就不用从实参那里取值了。

默认参数

单个默认参数

若填写参数,使用填写的,若不填写,则使用默认的

void Myprint(int x=3)

{

cout<<"x:"<<x<<endl;

}

多个默认参数

如果默认参数出现,那么右边的都必须有默认参数

#include<iostream>

using namespace std;

float volume(float length,float weight=4,float high=5)

{

return length*weight*high;

}

int main()

{

float v=volume(10); //200

float v1=volume(10,20); //1000

float v2=volume(10,20,30); //6000

cout<<v<<endl;

cout<<v1<<endl;

cout<<v2<<endl;

return 0;

}

规则

1.只有参数列表后面部分的参数才可以提供默认参数值

2.一旦在一个函数调用中开始使用默认参数值,那么这个参数后的所有参数都必须使用默认参数值

占位参数

主函数(main函数)

返回值

返回类型必须为int,即整数类型。int类型是一种内置类型,即语言自身定义的类型。

main的返回值用来指示状态,返回值0表示成功,非0的返回值的含义由系统定义,通常用来指出错误类型。

inline内联函数

基本概念

C++提供了inline关键字,实现了真正的内嵌

特点

1.内联函数声明时inline关键字必须和函数定义结合在一起,否则编译器会直接忽略内联请求

2.C++编译器直接将函数体插入在函数调用的地方

3.内联函数没有普通函数调用时的额外开销(压栈、跳转、返回)

4.内联函数是一种特殊的函数,具有普通函数的特征(参数检查,返回类型......)

5.内联函数由编译器处理,直接将编译后的函数体插入调用的地方,

宏代码片段由预处理器处理,进行简单的文本替换,没有任何编译过程

6.C++内联编译的限制:

不能存在任何形式的循环语句

不能存在过多的条件判断语句

函数体不能过于庞大

不能对函数进行取址操作

函数内联声明必须在调用语句之前

7.编译器对于内联函数的限制并不是绝对的,内联函数相对于普通函数的优势只是省去了函数调用时压栈,跳转和返回的开销。因此,当函数体的执行远大于压栈,跳转和返回所用的开销时,那么内联将无意义

内联函数 vs 宏函数

总结

优点

避免调用时的额外开销(入栈和出栈操作)

代价

由于内联函数的函数体在代码段中会出现多个"副本",因此会增加代码段的空间

本质

以牺牲代码段空间为代价,提高程序的运行时间的效率

适用场景

函数体很"小",且被"频繁"调用

相关推荐
会周易的程序员9 小时前
aiDgePLC — IEC61131-3 ST PLC 虚拟机调试与运行环境
c++·物联网·虚拟机·st·工业协议·iec61131·梯形图
wuminyu11 小时前
JVM利用io_uring优化堆外内存性能原理剖析
java·linux·c语言·jvm·c++
gumichef11 小时前
第二章:C/C++内存管理
c++·内存管理
小龙报15 小时前
【优选算法】1.搜索插入位置 2.x的平方根
java·c语言·数据结构·c++·python·算法·蓝桥杯
A_humble_scholar15 小时前
Linux(二) C++ TCP/UDP网络编程
linux·网络·c++
SNAKEpc1213816 小时前
OpenGL(十五)- 着色器语言GLSL
c语言·c++·线性代数·算法·矩阵·图形渲染·着色器
欧特克_Glodon16 小时前
OpenCV计算机视觉开发入门与实践<六>:OpenCV架构模块简介
c++·人工智能·opencv·计算机视觉
Rabitebla17 小时前
C++11 新特性详解(一):列表初始化、initializer_list 与右值引用
java·开发语言·数据结构·c++·算法·leetcode·list
MC皮蛋侠客17 小时前
TDengine C++ 系列(11):性能模型与调优——从测量到优化
c++·php·tdengine
兔兔兔兔118 小时前
记录C++ 3
开发语言·c++