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:for(…; …; …) のようなループのうち、C++11で導入された範囲ベースforループに置き換えられるものを検出し、対応する範囲ベースループ式を提示します。
- Pass-By-Value: 値渡しイディオム。
- auto_ptr:非推奨となった std::auto_ptr の使用箇所を検出し、std::unique_ptr に置き換えます。
- auto指定子:変数宣言で auto 型指定子を使える箇所を検出します。
- nullptr:該当する場合に nullptr に置き換えるべきヌルリテラルを検出します。
- std::bind:このチェックは
std::bindの使用箇所を検出し、単純な使用をラムダへ置き換えます。必要に応じて、ラムダでは値キャプチャが使われます。 - 非推奨ヘッダー: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 modernizerツールが提供する推奨事項が特に便利なのは、最も有用なC++11機能のいくつかを対象としており、それらがソースコードへ導入しやすく、C++プロジェクトに大きな価値を追加できる点です。
