【发布时间】: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以*it或it->以外的其他形式出现在正文中。在auto elem、auto& elem或auto const& elem之间做出选择。
标签: c++ code-cleanup