C++11/C++14/C++17 对核心语言做了多项补充,并扩展了 C++ 标准库。其中一些新特性非常易于使用,能为您的 C++ 项目带来显著的价值。
自动检测代码中可以使用某些新 C++11 特性的位置是很有用的。为此,clang-tidy是一个独立的工具,用于自动将按照旧标准编写的 C++ 代码转换为在适当之处使用最新 C++ 标准的特性。
使用 Clang 的开发者可以轻松利用 clang-tidy 工具。然而,对于 Visual C++ 开发者和使用其他编译器的用户来说,要从这个实用工具的成果中受益就没那么容易了。
为了让所有 C++ 开发者都能从这个工具中受益,CppDepend现已将其集成到 Windows 2018.1 版本中,用于检测可以使用以下特性的位置:
- Override(重写):检测那些重写了基类虚函数、但尚未添加 override 说明符的成员函数,找出可以添加该说明符的位置。
- Loop Convert(循环转换):检测可以用 C++11 引入的基于范围的循环替换的 for(…; …; …) 循环,并给出相应的基于范围的循环表达式。
- Pass-By-Value(按值传递):检测适合使用按值传递惯用法的调用。
- auto_ptr:检测对已弃用的 std::auto_ptr 的使用,并将其替换为 std::unique_ptr。
- auto 说明符:检测变量声明中可以使用 auto 类型说明符的位置。
- nullptr:检测可以替换为 nullptr 的空值字面量。
- std::bind:该检查查找对
std::bind的使用,并将简单用法替换为 lambda 表达式。lambda 会在需要时使用值捕获。 - 已弃用的头文件:一些继承自 C 库的头文件在 C++ 中已被弃用,不再推荐在 C++ 代码库中使用。有些在 C++ 中已无任何作用。更多细节请参阅 C++14 标准的 [depr.c.headers] 一节。
- std::shared_ptr:该检查查找通过显式调用构造函数和
std::shared_ptr表达式创建new对象的代码,并将其替换为对std::make_shared的调用。 - std::unique_ptr:该检查查找通过显式调用构造函数和
std::unique_ptr表达式创建new对象的代码,并将其替换为对std::make_unique的调用——该函数在 C++14 中引入。 - 原始字符串字面量:该检查有选择地将包含转义字符的字符串字面量替换为原始字符串字面量。
如何使用此功能?
此功能默认未启用;您可以从"项目属性"(Project properties) => Analysis => Modernize C++ Code 中启用它。不过,启用它会增加分析代码库所需的时间,因此我们建议在不再需要分析结果时将其禁用。

分析完成后,您可以在"Modernize C++ Code"分组中找到包含 C++11 建议的 CQLinq 查询:

对于每个查询,您都可以看到代码可以现代化的位置。您可以双击每个结果,跳转到可以应用改进的源代码位置。

Clang 现代化工具提供的建议特别有用的一点是:它们覆盖了一些最实用的 C++11 特性,这些特性很容易引入到您的源代码中,并能为您的 C++ 项目带来显著的价值。
