当前位置: 首页 > news >正文

C++函数使用

C++函数使用

  • 函数定义
  • 参数传递方式
    • 传值
    • 传引用
    • 传指针
  • 函数重载
  • 函数默认参数
  • 函数占位参数
  • 内联函数
  • 函数指针
  • Lambda表达式

函数定义

返回类型 函数名(参数列表) {// 函数体// 执行语句return 返回值;  // 如果返回类型不是 void
}int add(int a,int b){return a + b;}
int gen(){return 1;}
void print(int a){}
void show(){}

参数传递方式

传值

1、函数内部修改参数值,不影响调用方的实际参数值
2、优点:安全,原数据不受影响
3、缺点:大对象拷贝开销大

void swap(int a, int b)
{int temp = b;b = a;a = temp;
}int main()
{int  a = 10, b = 20;cout << "调用前 a=" << a << ", b=" << b << endl;swap(a, b);cout << "调用后 a=" << a << ", b=" << b << endl;
}

传引用

1、函数内部修改参数值,调用方的实际参数值一起跟着变
2、优点:无拷贝开销,高效,可修改原值
3、缺点:一旦参数被修改,可能原因会找很久

void swap(int& a, int& b)
{int temp = b;b = a;a = temp;
}int main()
{int  a = 10, b = 20;cout << "调用前 a=" << a << ", b=" << b << endl;swap(a, b);cout << "调用后 a=" << a << ", b=" << b << endl;
}

传指针

传递变量的地址,通过解引用修改原值

void swap(int* a, int* b)
{int temp = *b;*b = *a;*a = temp;
}int main()
{int  a = 10, b = 20;cout << "调用前 a=" << a << ", b=" << b << endl;swap(&a, &b);cout << "调用后 a=" << a << ", b=" << b << endl;
}

函数重载

1、函数名称相同,只要它们的参数列表不同(参数类型、数量、顺序)
2、返回类型不作为参考

int add(int a, int b) {return a + b;
}double add(double a, double b) {return a + b;
}

函数默认参数

1、从右向左定义(一旦发现默认参数,那么该参数右边的参数必须都有默认值)
2、声明和定义中只能在一个地方指定默认值(通常在声明中)
3、调用的时候,默认参数可以不用传

int add(int a, int b, int c = 10);int main()
{int  a = 10, b = 20;int result = add(a, b);cout << result << endl;
}int add(int a, int b, int c)
{return a + b + c;
}

函数占位参数

1、函数声明时仅指定类型而不命名参数,调用时需传入对应参数但函数内部无法使用该参数。常用于保持接口兼容性或预留扩展位
2、调用的时候,占位参数必须传值

int add(int a, int b, int);int main()
{int  a = 10, b = 20;int result = add(a, b, 10);cout << result << endl;
}int add(int a, int b, int)
{return a + b;
}

内联函数

1、用空间换时间,避免函数调用开销(压栈、跳转等)
2、编译器尝试将函数体直接插入调用处(inline 是建议,编译器可忽略)
3、简短、频繁调用的函数,通常在头文件中定义
4、不适用于递归、大函数

inline int add(int a, int b)
{return a + b;
}int main()
{int  a = 10, b = 20;int result = add(a, b);cout << result << endl;
}

函数指针

1、指向函数的指针,可以像变量一样传递和调用
2、常用于回调函数等

int add(int a, int b)
{return a + b;
}int sub(int a, int b)
{return a - b;
}int main()
{int  a = 10, b = 20;// 加法int (*funcPtr)(int, int) = add;int result = funcPtr(a, b);cout << "a+b=" << result << endl;// 减法funcPtr = sub;result = funcPtr(a, b);cout << "a-b=" << result << endl;
}

Lambda表达式

[capture](parameters) -> return_type {// 函数体
}
  • capture捕获列表‌:定义Lambda访问外部变量的方式(如[]不捕获、[=]值捕获、[&]引用捕获)‌
  • parameters参数列表‌:与普通函数参数类似,支持auto参数(C++14起)‌
  • return_type 返回类型‌:可省略,由编译器自动推导
int  a = 10, b = 20;
auto add = [](int x, int y) { return x + y; };
cout << "a+b=" << add(a, b) << endl;int factor = 3;
auto multiply = [factor](int x, int y) { return (x + y) * factor; };
cout << "factor*(a+b)=" << multiply(a, b) << endl;
http://www.dtcms.com/a/502800.html

相关文章:

  • 立创EDA专业版使用技巧——全部框选与部分框选
  • yii2添加新的modules完为什么访问的时候报错404
  • HTML 头部
  • 内存流 + NPOIExcel, 读取Excel单元格内容
  • 文件包含漏洞全解析:从原理到实战
  • 【深度学习新浪潮】天数天算、地数天算与天地同算:概念解析与SOTA解决方案
  • 《C++ Web 自动化测试实战:常用函数全解析与场景化应用指南》
  • 在线做数据图的网站网站建设 鸿
  • K8s HTTPS流量管理实战:GatewayAPI指南
  • stable-diffusion-webui 安装环境
  • 【Linux】基础IO(二)深入理解“一切皆文件” 与缓冲区机制:从原理到简易 libc 实现
  • 键值存储分解技术在物联网场景中的优化
  • 企业电子商务网站建设的重要性2021最新域名id地址
  • 【C++】二叉搜索树(图码详解)
  • MySQL:14.mysql connect
  • 建设工程消防信息网站网站开发全程实例课本代码
  • 用excel绘制茎叶图
  • 龙岗优化网站建设门户网站建设需要多少
  • 东莞seo网站制作报价网站有域名没备案
  • 网站开发框架图自建wordpress主题
  • 网站公司模板多少工资
  • 江西建设厅网站dede手机网站模板哦
  • 网站运维平台建设原则西乡网站的建设
  • 帮网站网站做推广被抓会判刑吗凡科做的网站百度不到
  • 一台服务器怎么做多给网站wordpress用户投稿
  • 提供免费主页空间的网站中石油第七建设公司网站
  • 顺德网站建设基本流程高柏企业管理咨询有限公司
  • 深圳公司建立网站网络建设专业石家庄
  • 基于jsp的电商网站开发wordpress模板带小程序源码
  • 大秦建设集团有限责任公司官方网站开发一个游戏软件多少钱