使用 auto&& 和 const auto & 的经验法则
Rule of thumb for using auto&& and const auto &
我研究过auto
,我知道它从初始化的值推断出类型。如果我尝试编写一些使用auto
的指南,我可以将以下语句作为规则吗?
- 对所有可修改的值(r 值和 l 值,因为它是通用引用)使用
auto &&
, -
auto &&
即使是只读值, - 尽可能使用
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)正如你所说,"个人对编码风格的偏好"
相关文章:
- 在for循环中使用auto vs decltype(vec.size())来处理字符串的向量
- 如何在自定义类中启用'auto loops'?
- 当我在第一个循环中使用"auto"时,它工作正常,但是使用"int"它会给出错误,为什么?
- 为什么当我为 for(auto& it : myUnorderedMap) {... = std::move(it.second)} 时,我会得到一个 const 引用?
- 为什么结构化绑定不使用"auto&"返回对结构成员的引用,而是返回成员本身
- 擦除许多矢量元素,同时使用'auto'
- 考虑到其他好处,关键字'auto'真的有助于简化调试C++吗?
- 何时返回指针与返回对象的一般经验法则?
- 点云库 (PCL) - 声明点云时何时应使用 ::P tr 的经验法则?
- 是按值抛出和按引用捕获的经验法则
- 并发::并行端口开销和性能命中率(经验法则)
- 新建和删除的经验法则
- 在C++中使用指针或引用作为函数的返回类型是否有经验法则
- 当通过值传递比通过常量引用传递快时的经验法则
- 标准库/模板化容器的常量语义的经验法则
- C++构造函数重载的经验法则
- 当“虚拟”是一个相当大的开销时,有什么经验法则吗
- 避免违反严格混叠规则的最简单的经验法则
- 将函数放在头文件中的经验法则
- 使用 auto&& 和 const auto & 的经验法则