【问题标题】:Find and tag const variables and const functions in C++在 C++ 中查找和标记 const 变量和 const 函数
【发布时间】:2014-08-26 23:45:17
【问题描述】:

我有一个庞大的 C++ 代码库(超过 500,000 个 LOC,10k 个文件),我对代码很满意,但它有几个问题:

const 没有得到应有的使用。例如:

class A
{
  int foo( B &a )
  {
    return a.v * 10;
  }
};

真的应该改成:

class A
{
  int foo( const B &a )  const
  {
    return a.v * 10;
  }
};

在大多数情况下,编译器似乎应该知道函数何时可以是 const。

截至 2000 年代初期,它也已使用标准 C++ 编写。我想改用 auto 和 for range 循环所以

 std::map< int, std::string >::iterator i = m.start();
 for ( ; i != m.end(); i++
   ...;

for ( const auto p : m )
  ...;

我可以用 perl 和/或 sed 破解一些可能会发现大多数情况的东西,因为代码非常符合我们的内部标准,但我只是想知道是否有真正的工具可以做到这一点并且我们可能想做的其他事情?如何将遗留 C++ 代码迁移到新标准?

【问题讨论】:

  • 不要使用 int foo( const int &a ),只使用 int foo(int a)。
  • 不要更改未损坏的...
  • 强烈建议不要自动执行循环位。由于各种原因,有很多循环实际上需要迭代器。
  • 是的,循环语法部分可能有点麻烦。如果您有任何循环需要在迭代容器时删除元素,那么您几乎不得不在基于范围的 for 循环中使用迭代器语法。
  • @MooingDuck: 真正需要迭代器的情况很容易检测到,it*itit-&gt; 以外的其他形式出现在正文中。在auto elemauto&amp; elemauto const&amp; elem 之间做出选择。

标签: c++ code-cleanup


【解决方案1】:

如果您的代码被组织到 Visual Studio 解决方案中,您的问题似乎是使用 ReSharper for C++ 的绝佳机会。它仍在开发中,但由于这一事实,它是免费

它包含大量内置代码检查,您可以执行解决方案范围的代码清理。我每天都使用它的 C# 版本,虽然 C++ 版本还有很多需要赶上的地方,但它似乎是适合您情况的工具。

【讨论】:

  • 有趣。你知道 Linux 世界有什么类似的东西吗?
  • 很遗憾我没有。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-14
  • 1970-01-01
  • 1970-01-01
  • 2019-02-07
相关资源
最近更新 更多