news 2026/10/8 14:28:45

【C++】auto

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【C++】auto

auto 的作用

作用:自动类型推导,编译器根据初始化表达式自动推断变量类型,像一些需要类中的迭代器等都可以自动适配类型。

旧 C 语言里auto是「自动存储期」关键字,C++11 起被重新定义成类型占位符。

auto a = 10; // int auto b = 3.14; // double auto str = "hi"; // const char* string s = "abc"; // std::string auto ch = s.begin();

代码对比:

string s = "abc"; // std::string std::string::iterator it = s.begin(); auto it = s.begin();

重要规则

  1. 必须初始化,不能写auto a;,没有初始值无法推导
  2. 一条声明多个变量,推导出来类型必须相同,否则编译报错
  3. auto会默认丢弃顶层 const
    const int m = 5; auto n = m; // n 是 int,不是 const int
  4. 推导规则等价于模板实参推导

for 的循环用法

vector<int> v{1,2,3}; for(auto val : v){ cout << val; }

auto 会对内容进行依次打印出来,原理就是 auto 会调用类里面对应的 begin() 和 end () 迭代器,进行确定为位置,如果类中没有begin 和end 会出现编译错误的情况。

auto 的 const 和 const &

auto 只自动匹配基础类型,不会自动给变量加上引用,也不会默认保留变量的顶层 const;想要引用、只读 const 效果,需要我们自己在 auto 旁边写 & /const。

带引用、const 修饰

int x = 100; auto &r = x; // int& 引用 const auto &cr = x; // const int& auto *p = &x; // int*

string 的 auto 的运用

string s = "hello"; // auto:拷贝char,副本修改不影响原字符串 for(auto ch : s) { ch = 'x'; } cout << s << endl; // hello,原串没变 // auto&:引用字符,可以修改原字符串 for(auto& ch : s) { ch = 'x'; } cout << s << endl; // xxxxx // const auto& 只读遍历 const string s2 = "test"; for(const auto& ch : s2) { cout << ch; }

注意:像这种比较大型的类,单纯用auto 会加大拷贝开销,导致运行代码内存时间上的负担,最好能用应用就应用,只读不写的就多加上 const 。

  1. 基础小类型(int、char)auto拷贝代价很低,写起来简单,只读遍历可以直接 auto;
  2. 大对象(string、自定义类)
  • ✅只读优先:const auto&避免拷贝
  • 性能最优 ✅需要修改容器元素:auto&
  • ❌不推荐单纯auto,会复制一份大对象,产生额外开销

易错点

vector<string> vec{"A","B"}; for(auto& x : vec){ x = "new"; // ✅正常修改容器元素 } const vector<string> cv{"1","2"}; // for(auto& x : cv) {} // ❌报错,普通引用不能绑定const容器的元素 // 出现一个权限放大的情况 for(const auto& x : cv){} // ✅必须const auto&
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/8 14:28:20

为什么要先把测试收成一条链路

专栏第 1 篇。没有命令。先把立场说清楚&#xff0c;后面每一篇 Skill 才不会被学成孤立的脚本生成器。周一的站会常常是这样&#xff1a;研发说模型已经把这个迭代的接口和页面都改完了&#xff0c;昨晚还用编程智能体搭了一条新的智能体流程&#xff0c;下午试用&#xff0c;…

作者头像 李华
网站建设 2026/10/8 14:27:51

FDE 前线部署工程师深度解析:AI 时代的新型技术角色

FDE 前线部署工程师深度解析&#xff1a;AI 时代的新型技术角色 引言 在 AI 浪潮席卷各行各业的今天&#xff0c;一个新的技术角色正在快速崛起——FDE&#xff08;Forward Deployed Engineer&#xff0c;前线部署工程师&#xff09;。无论是硅谷的 AI 独角兽&#xff0c;还是国…

作者头像 李华
网站建设 2026/10/8 14:25:56

PCIe锁定事务深度解析:MRdLk、VC0约束与枚举掉卡排查

1. 锁定事务的架构定位与设计初衷1.1 为什么 PCIe 需要"锁定"这种机制聊 PCIe 锁定事务之前&#xff0c;得先想清楚一个问题&#xff1a;一条总线好端端的&#xff0c;为什么要搞出"锁定"这种听起来就很霸道的操作&#xff1f;答案藏在数据一致性这四个字里…

作者头像 李华
网站建设 2026/10/8 14:25:25

PLC编程入门:梯形图、定时器与编程软件实战避坑指南

1. 为什么越来越多人开始啃PLC编程这块硬骨头如果你在工厂做过设备维护&#xff0c;或者正在往自动化方向转&#xff0c;大概率绕不开一个词——PLC。这东西全称叫可编程逻辑控制器&#xff0c;说白了就是工业现场的大脑&#xff0c;负责接收按钮、传感器这些输入信号&#xff…

作者头像 李华
网站建设 2026/10/8 14:23:34

Pixelle-Video:一条主题进去,几分钟出第一条 AI 短视频

Pixelle-Video&#xff1a;一条主题进去&#xff0c;几分钟出第一条 AI 短视频 【免费下载链接】Pixelle-Video &#x1f680; AI 全自动短视频引擎 | AI Fully Automated Short Video Engine 项目地址: https://gitcode.com/GitHub_Trending/pi/Pixelle-Video 输入一句…

作者头像 李华