《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 可能让读者困惑)。