加班加到吐狂魔 2024-07-30 10:28 采纳率: 0%
浏览 3

如何看待在C++开发中频繁使用auto?

如何看待在C++开发中频繁使用auto?
我在评审代码的时候经常发现声明变量时过度使用 auto 的问题。
我推荐的使用 auto 的原则是:当你不在乎变量的类型时(特别在泛型代码中),或者变量的类型跟表达式本身存在重复时,就使用 auto;反之,当你会关心变量的类型而其类型又不显然时,则明确写出变量类型。下面是一些适合用 auto 的例子:

auto it = v.begin();                         // 迭代器的具体类型通常不关心
auto ptr = make_unique<Shape>();             // 通过表达式易判断类型;避免重复
auto res = reinterpret_cast<uintptr_t>(ptr); // 转型的结果类型不再重复

下面则是个非常可商榷的例子:

auto pos = GetPos();

不熟悉代码的人不会知道 pos 的类型是什么。不管实际类型是

pair<int, int>,
array<double, 3>,
还是 Coord,

写出来费不了多大力气,却能帮助读者。如果是 Coord,别人也能更快地找到定义,包括在编辑器里的跳转,或者在浏览器界面的搜索。
代码只需要写一次,但会被阅读很多次。这个读者可能是你自己。很多人在纠结 IDE 能自动提示类型这个问题。问题在于,你只在 IDE 里看代码吗?此外,在大项目里,正确跳转和类型推理往往不能正确工作,因为没有单个的让 IDE 理解的配置文件。
我个人看代码的地方经常会是浏览器(特别是代码评审)、Vim(个人偏好,配好了跳转可以非常准)、bat,有时甚至是最土的 cat/less。
读代码不累,比写代码不累更重要。让脑子休息,而不是让手指休息。我说用 auto 的场合,也是会让读代码的人更舒服的做法,因为更简洁、不重复。
附:C++ 核心指南对于什么时候不该用 auto 说得较少,但至少说了什么时候该用:

ES.11: Use auto to avoid redundant repetition of type names
Reason
Simple repetition is tedious and error-prone.
When you use auto, the name of the declared entity is in a fixed position in the declaration, increasing readability.
In a function template declaration the return type can be a member type.

最重要的仍然是避免重复。

  • 写回答

1条回答 默认 最新

  • GISer Liu 2024-07-30 11:00
    关注

    该回答引用自GPT-3.5, 由博主 GISer Liu 编写:

    在C++开发中,auto关键字的使用是一个经常被讨论的话题。auto关键字可以自动推导变量的类型,这在一定程度上简化了代码的编写,但也带来了一些可读性和维护性的问题。以下是对在C++开发中频繁使用auto的看法和建议:

    1. auto的使用原则

    • 适合使用auto的场景

      • 当变量类型显而易见时,例如迭代器、智能指针等。
      • 当变量类型在表达式中已经明确时,避免重复。
      • 在泛型编程中,类型推导可以减少代码的复杂性。
    • 不适合使用auto的场景

      • 当变量类型不明显时,明确写出类型可以提高代码的可读性。
      • 在需要明确知道变量类型的情况下,例如函数返回值类型。

    2. 具体例子分析

    • 适合使用auto的例子

      auto it = v.begin();                         // 迭代器的具体类型通常不关心
      auto ptr = make_unique<Shape>();             // 通过表达式易判断类型;避免重复
      auto res = reinterpret_cast<uintptr_t>(ptr); // 转型的结果类型不再重复
      
    • 不适合使用auto的例子

      auto pos = GetPos();
      

      在这个例子中,pos的类型不明显,明确写出类型可以提高代码的可读性。

    3. 代码可读性与维护性

    • 代码的可读性

      • 代码的可读性对于维护和理解代码至关重要。明确写出类型可以帮助读者更快地理解代码。
      • 在大型项目中,IDE的类型推导可能不总是准确,明确写出类型可以减少依赖IDE的类型推导。
    • 代码的维护性

      • 代码的维护性同样重要。明确写出类型可以减少未来修改代码时的潜在问题。

    4. C++核心指南的建议

    C++核心指南中提到,使用auto可以避免重复的类型名,减少代码的冗余和错误。然而,指南也强调了在需要明确知道类型的情况下,应该明确写出类型。

    5. 结论

    在C++开发中,auto关键字的使用应该谨慎,遵循以下原则:

    • 在类型显而易见或避免重复的情况下使用auto
    • 在类型不明显或需要明确知道类型的情况下,明确写出类型。

    通过平衡auto的使用,可以在保持代码简洁的同时,提高代码的可读性和维护性。

    参考文献

    希望这些建议能帮助您在C++开发中更好地使用auto关键字。

    如果该回答解决了您的问题,请采纳!如果没有,请私信联系或评论您的疑惑

    评论

报告相同问题?

问题事件

  • 创建了问题 7月30日

悬赏问题

  • ¥15 asp写PC网站开通了微信支付,扫码付款不能跳转
  • ¥50 AI大模型精调(百度千帆、飞浆)
  • ¥15 关于#c语言#的问题:我在vscode和codeblocks中编写c语言时出现打不开源文件该怎么办
  • ¥15 非科班怎么跑代码?如何导数据和调参
  • ¥15 福州市的全人群死因监测点死亡原因报表
  • ¥15 Altair EDEM中生成一个颗粒,并且各个方向没有初始速度
  • ¥15 系统2008r2 装机配置推荐一下
  • ¥500 服务器搭建cisco AnyConnect vpn
  • ¥15 悬赏Python-playwright部署在centos7上
  • ¥15 psoc creator软件有没有人能远程安装啊