C++中auto的使用

auto 是 C++ 里非常重要、刷题和工程都会大量用到的关键字

一、auto 是什么?

auto 让编译器根据初始化表达式,自动推导变量的类型。

你不用手写类型,编译器帮你"算出来"。


二、最基础的用法

1️⃣ 变量定义

cpp 复制代码
auto x = 10;        // int
auto y = 3.14;      // double
auto s = string("a"); // string

等价于你手写:

cpp 复制代码
int x = 10;
double y = 3.14;
string s = "a";

⚠️ 必须初始化,否则无法推导:

cpp 复制代码
auto a;   // ❌ 错

三、auto + 引用 / const(非常重要)

2️⃣ auto& ------ 引用,避免拷贝

cpp 复制代码
vector<int> v{1,2,3};
for (auto& x : v) {
    x++;     // 修改原数组
}
  • xint&
  • 不拷贝,能修改

3️⃣ const auto& ------ 只读引用(最常用)

cpp 复制代码
for (const auto& x : v) {
    cout << x;
}
  • 不拷贝
  • 不能修改
  • 遍历容器的首选写法

4️⃣ auto(无 &)------ 会拷贝

cpp 复制代码
for (auto x : v) {
    x++;     // 只改拷贝,不改 v
}

四、auto 在结构化绑定中的用法(C++17)

cpp 复制代码
pair<int,int> p = {1,2};
auto [a, b] = p;

等价于:

cpp 复制代码
int a = p.first;
int b = p.second;

⚠️ 结构化绑定只能用 auto,不能写具体类型。

引用版结构化绑定(常用)

cpp 复制代码
auto& [a, b] = p;          // 可修改 p
const auto& [a, b] = p;   // 只读

五、auto 在函数返回值中的用法

1️⃣ 接收返回值

cpp 复制代码
auto res = dfs(root);  // res 类型由 dfs 返回值决定

2️⃣ 返回类型推导(C++14)

cpp 复制代码
auto add(int a, int b) {
    return a + b;  // 返回 int
}

六、auto 在 STL / 刷题中的典型场景

1️⃣ 遍历容器(99% 推荐)

cpp 复制代码
for (const auto& it : container) { ... }

2️⃣ 接收复杂类型

cpp 复制代码
unordered_map<string, vector<pair<int,double>>> mp;
for (const auto& [key, vec] : mp) { ... }

3️⃣ DFS / 树 DP 返回 pair

cpp 复制代码
auto [take, skip] = dfs(node);

七、auto 的推导规则(知道这 3 条就够)

1️⃣ auto 会丢掉顶层 const

cpp 复制代码
const int x = 10;
auto y = x;        // y 是 int

2️⃣ auto& 会保留引用和 const

cpp 复制代码
const int x = 10;
auto& y = x;       // y 是 const int&

3️⃣ 初始化表达式决定一切

cpp 复制代码
auto a = {1,2,3};  // initializer_list<int>

八、常见坑(一定要避开)

❌ 误以为 auto 不会拷贝

cpp 复制代码
for (auto x : bigVector) { ... } // 每次拷贝

改为:

cpp 复制代码
for (const auto& x : bigVector) { ... }

❌ 结构化绑定写成具体类型

cpp 复制代码
pair<int,int> [a,b] = p;  // ❌

只能:

cpp 复制代码
auto [a,b] = p;           // ✅

❌ 忽略 auto 推导导致类型变化

cpp 复制代码
auto x = 0;    // int
x = 3.14;      // 3,被截断

九、什么时候"应该"用 auto?

✅ 强烈推荐用 auto 的情况

  • 类型很长(STL 容器)
  • 遍历容器
  • 接收函数返回值
  • 结构化绑定

⚠️ 不建议用 auto 的情况

  • 类型对可读性很关键(如 int / double 混用)
  • API 对外接口(头文件)

十、刷题级使用口诀

遍历容器用 const auto&

要改元素用 auto&

拿返回值用 auto

解构 pair/tupleauto [a,b]


十一、一句话面试总结

auto 是编译期类型推导工具

用来减少冗余、避免拷贝、提升可读性

但要配合 & / const 使用,避免隐式性能问题

相关推荐
Wect7 小时前
LeetCode 130. 被围绕的区域:两种解法详解(BFS/DFS)
前端·算法·typescript
NAGNIP19 小时前
一文搞懂深度学习中的通用逼近定理!
人工智能·算法·面试
端平入洛1 天前
delete又未完全delete
c++
颜酱1 天前
单调栈:从模板到实战
javascript·后端·算法
CoovallyAIHub1 天前
仿生学突破:SILD模型如何让无人机在电力线迷宫中发现“隐形威胁”
深度学习·算法·计算机视觉
CoovallyAIHub1 天前
从春晚机器人到零样本革命:YOLO26-Pose姿态估计实战指南
深度学习·算法·计算机视觉
CoovallyAIHub1 天前
Le-DETR:省80%预训练数据,这个实时检测Transformer刷新SOTA|Georgia Tech & 北交大
深度学习·算法·计算机视觉
CoovallyAIHub1 天前
强化学习凭什么比监督学习更聪明?RL的“聪明”并非来自算法,而是因为它学会了“挑食”
深度学习·算法·计算机视觉
CoovallyAIHub1 天前
YOLO-IOD深度解析:打破实时增量目标检测的三重知识冲突
深度学习·算法·计算机视觉
NAGNIP2 天前
轻松搞懂全连接神经网络结构!
人工智能·算法·面试