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

Rule of thumb for using auto&& and const auto &

本文关键字:auto 经验法则 使用 const      更新时间:2023-10-16

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

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

编辑

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 &&可用于保存(初始化)任何值,或者
  • 我们可以在每一个可能的地方使用auto &&

您认为这种方法有什么缺陷吗?

1) 是2) 是3)正如你所说,"个人对编码风格的偏好"