使用auto&& amp;经验法则的经验法则和const auto&

时间:2016-07-12 09:07:03

标签: c++ c++11 const auto forwarding-reference

我研究过auto,我知道它从初始值中推断出类型。如果我尝试编写一些使用auto的指南,我可以将下面的语句作为规则吗?

  1. 使用auto &&表示可修改的所有值(r值和l值,因为它是通用引用),
  2. auto &&即使是只读值,
  3. 尽可能使用auto(编码风格的个人偏好)。
  4. 修改

    class Test
    {
    public:
        Test() = default;
        Test(const Test&) = default;
        Test(Test&&) = default;
    
        int i = 1;
    };
    
    Test getObj()
    {
        return Test();
    }
    
    Test& getObjByRef()
    {
        static Test tobj;
        return tobj;    
    }
    
    const Test getObjConst()
    {
        return Test();
    }
    
    int main()
    {
        auto && obj1 = getObj();
        obj1.i = 2;
    
        std::cout << " getObj returns: " << getObj().i << std::endl;
    
        auto&& obj2 = getObjByRef();
        obj2.i = 3;
    
        std::cout << " getObjByRef returns: " << getObjByRef().i << std::endl;
    
        auto && obj3 = getObjConst();
    
        //obj3.i = 4;  => //Error   C3490   'i' cannot be modified because it is being accessed through a const object
    
        return 0;
    }
    

    所以在上面的例子中,我使用auto &&来表示所有三个函数

    • getObj
    • getObjByRef
    • getObjConst

    它按预期工作。 现在我可以结束

    • auto &&可用于保存(初始化)任何值, OR
    • 我们可以在每个可能的地方使用auto &&

    您认为这种方法存在任何缺陷吗?

1 个答案:

答案 0 :(得分:-4)

1)是的 2)是的 3)正如你所说,&#39;个人偏好编码风格&#39;