• 关于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 & 后面的变量才会是引用。

    本人新博客网址为:http://www.hizds.com
    本博客注有“转”字样的为转载文章,其余为本人原创文章,转载请务必注明出处或保存此段。c++/lua/windows逆向交流群:69148232
  • 相关阅读:
    Redis之面试题总结
    nginx入门,安装
    NGINX工作原理(2)
    Ngnx工作原理(1)
    Linux之常用脚本
    进程管理工具之supervisor[详解]
    PHP进阶书籍
    LVS、Nginx及HAProxy
    高级程序员与初级程序员差别在哪里?
    详解Wox
  • 原文地址:https://www.cnblogs.com/zhangdongsheng/p/14704656.html
Copyright © 2020-2023  润新知