关于C++ auto使用要注意的一点
先看一片代码:
class Container { public: std::vector<int>& GetData() { return data_; } std::vector<int> data_; }; int main() { Container c; c.data_ = { 0,1,2,3 }; auto data = c.GetData();//这里data实际上是一个std::vector<int>而非 std::vector<int>& c.data_.push_back(10); for (auto& it : data) //这里实际上不会输出10 std::cout << it << std::endl; return 0; }
作者本来想让GetData函数返回一个引用,当后面push_back(10)的时候,这个引用里的值也应当变化。但是实际上这个auto data得到的值是一个值类型而非引用。要想让他成为一个引用。则必须这样写。
auto& data = c.GetData()
这说明一个事实是,auto 和 auto & 明显的区别,auto永远不会为你生成一个引用,只有你明确指出auto & 后面的变量才会是引用。
本博客注有“转”字样的为转载文章,其余为本人原创文章,转载请务必注明出处或保存此段。c++/lua/windows逆向交流群:69148232
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 字符编码:从基础到乱码解决
2018-04-26 LUA可变长参数 ... 三个点