在C+中查找并标记常量变量和常量函数+; 我有一个大的C++代码库(500000 +LOC,10K文件),我对代码很满意,但是有几个问题:

在C+中查找并标记常量变量和常量函数+; 我有一个大的C++代码库(500000 +LOC,10K文件),我对代码很满意,但是有几个问题:,c++,code-cleanup,C++,Code Cleanup,const没有得到应有的使用。例如: class A { int foo( B &a ) { return a.v * 10; } }; 应该改为: class A { int foo( const B &a ) const { return a.v * 10; } }; 在大多数情况下,编译器似乎应该知道函数何时可以是常量 它也在标准C++中写到了20世纪初。我想更改为使用自动和范围循环,以便 std::map< int,

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

class A
{
  int foo( B &a )
  {
    return a.v * 10;
  }
};
应该改为:

class A
{
  int foo( const B &a )  const
  {
    return a.v * 10;
  }
};
在大多数情况下,编译器似乎应该知道函数何时可以是常量

它也在标准C++中写到了20世纪初。我想更改为使用自动和范围循环,以便

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

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

< p>您的问题似乎是一个很好的机会,以将您的代码组织成VisualStudio解决方案。它仍在开发中,但由于这一事实,它是免费的


它包含许多内置代码检查,您可以执行解决方案范围内的代码清理。我每天使用它的C版本,而C++版本还有很多要赶上去,它似乎是适合你的情况的工具。

不要使用int fo(const int和a),只是int fo(int a)。不要改变什么是不坏的…我强烈建议不要自动做循环位。由于各种原因,有很多循环实际上需要迭代器。是的,循环语法部分可能有点复杂。如果有任何循环在遍历容器时需要删除元素,则必须在基于范围的for循环上使用迭代器语法。@MooingDuck:实际需要迭代器的情况很容易检测,你有
以某种形式出现在身体内部,而不是
*它
它->
它更难决定是
自动元素
自动元素
,还是
自动常量和元素
。有趣。你知道Linux世界有类似的事情吗?不幸的是,我不知道。
for ( const auto p : m )
  ...;