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

《C++》函数内联,auto关键字

文章目录

  • 一、函数内联(inline)
    • 1.1定义:
    • 1.2核心原理
    • 1.3声明内联函数
    • 1.4适用场景
    • 1.5注意事项
  • 二、auto关键字
    • 2.1定义:
    • 2.2基本用法
    • 2.3注意事项

一、函数内联(inline)

1.1定义:

在 C++ 中,函数内联 是一种编译器优化技术,目的是减少函数调用的开销,提高程序运行效率。

1.2核心原理

当函数被声明为内联时,编译器会尝试在函数调用处直接插入函数体代码,而不是像普通函数那样通过跳转执行函数(避免了参数压栈、跳转、返回等操作的开销)。

1.3声明内联函数

在函数定义前加上 inline 关键字:

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

类内定义的成员函数默认是内联函数(无需显式加 inline )

class MyClass {
public:void print() {  // 默认为内联函数cout << "Hello" << endl;}
};

1.4适用场景

①函数体简短,调用频繁。
②非递归函数、复杂循环或体积大的函数(否则会导致代码膨胀,反而降低效率)。

1.5注意事项

①inline 只是编译器的建议,编译器可能忽略该请求(例如函数体过大时)。
②内联函数的定义通常需要放在头文件中(因为编译器需要在调用处看到函数体才能进行替换)。

二、auto关键字

2.1定义:

在 C++ 中, auto 是一个用于自动推导变量类型的关键字,它让编译器根据初始化表达式的类型来确定变量的类型,简化代码书写。

2.2基本用法

①变量声明:用 auto 代替具体类型,编译器会自动推导。

auto a = 10;          // 推导为 int
auto b = 3.14;        // 推导为 double
auto c = "hello";     // 推导为 const char*
auto d = vector<int>(); // 推导为 vector<int>

②与指针、引用结合:

int x = 5;
auto* p = &x;  // 推导为 int*(指针)
auto& r = x;   // 推导为 int&(引用)

③用于复杂类型:特别适合简化冗长的类型名(如 STL 容器迭代器)。

vector<string> names = {"a", "b", "c"};
// 传统写法:vector<string>::iterator it = names.begin();
auto it = names.begin();  // 自动推导为迭代器类型

2.3注意事项

①必须初始化: auto 声明的变量必须有初始化表达式,否则编译器无法推导类型。

auto x;  // 错误:无法推导类型

② 不能用于函数参数和返回值(C++11 起):
③ 数组和函数: auto 推导数组时会转为指针(除非结合引用),推导函数时会转为函数指针。
④避免过度使用:滥用会降低代码可读性(例如简单类型用 auto 可能让读者困惑)。

http://www.xdnf.cn/news/1161937.html

相关文章:

  • 用基础模型构建应用(第十章)AI Engineering: Building Applications with Foundation Models学习笔记
  • 探索无广告音乐世界:MusicFree 免费播放器
  • 海康威视视觉算法岗位30问及详解
  • BERT 的“池化策略”
  • 【NLP舆情分析】基于python微博舆情分析可视化系统(flask+pandas+echarts) 视频教程 - 主页布局实现
  • Three.js 立方体贴图(CubeMap)完全指南:从加载到应用
  • 大模型高效适配:软提示调优 Prompt Tuning
  • Python高效入门指南
  • 深入详解随机森林在放射治疗计划优化中的应用及实现细节
  • 部署 Zabbix 企业级分布式监控
  • Levels checking (filtering) in logging module
  • 大腾智能国产3D CAD软件正式上架华为云云商店
  • Pytorch01:深度学习中的专业名词及基本介绍
  • Linux的磁盘存储管理实操——(中)——逻辑卷管理实战
  • JavaScript的引入方式和基础语法的快速入门与学习
  • 【Linux】重生之从零开始学习运维之Mysql安装
  • Linux下SPI设备驱动开发
  • 管理项目环境和在环境中使用conda或pip里如何查看库版本———Linux命令行操作
  • 装饰器模式分析
  • Android Studio 的 Gradle 究竟是什么?
  • 在 Conda 中删除环境及所有安装的库
  • ElasticSearch:不停机更新索引类型(未验证)
  • 【iOS】锁[特殊字符]
  • 归并排序:优雅的分治排序算法(C语言实现)
  • Spring Boot05-热部署
  • 设计模式六:工厂模式(Factory Pattern)
  • Trae开发uni-app+Vue3+TS项目飘红踩坑
  • 数据结构自学Day11-- 排序算法
  • 迁移科技3D视觉系统:赋能机器人上下料,开启智能制造高效新纪元
  • react-window 大数据列表和表格数据渲染组件之虚拟滚动