ReSharper 2020.2ヘルプ

C++のコードインスペクションとクイックフィックス

ReSharperのコード解析の主な機能は、C++でもサポートされています。これらの機能の詳細については、コード解析の該当するトピックを参照してください。このセクションのサブジェクトでは、フィーチャマトリックスを見つけて、C++で正確にサポートされているものを確認することもできます。

このトピックでは、C++でコード解析機能を使用する例をいくつか見てみましょう。

デフォルトでは、コードインスペクションクイックフィックス、およびコンテキストアクションはすべてのソリューションファイルで使用できます。必要に応じて、ReSharperオプション(Alt+R O)のコード編集 | C++ | インスペクションページのソリューション外部のファイルでインスペクションを有効にし、クイックフィックスとコンテキストアクションを有効にするチェックボックスを使用して、ソリューションから参照される外部ファイルでこれらの機能を有効にできます。

コード・インスペクション

ReSharperの静的コード分析は、C++ファイル内のほとんどのコンパイラエラーと一部のコンパイラ警告を検出します。

その上、他のコードの課題を発見します。そうでなければランタイムで発見されます。例:コンストラクターで仮想メソッドを使用すると、このStackOverflowの質問(英語)で記述されていたように、予期しない動作が発生します。ReSharperは、コンパイルする前にこの課題を指摘しています。

ReSharper warning. virtual method in constructor

分析は、コード・インスペクション現在のドキュメントまたは指定されたスコープに適用することによって実行されます。

Code inspection results in a C++ project

インスペクション ReSharperが提供するコードの種類を調べるには、ReSharper C++コードインスペクションの完全なリストを調べましょう。

コードインスペクションをカスタマイズする方法については、コードインスペクション設定の構成を参照してください。

特定のインスペクションをすばやくオフにするか、すべてのインスペクションを非表示にするには、インスペクションコンテキストメニューを使用します。

Disable inspections in C++

クイックフィックス

クイックフィックスを使用すると、コードインスペクションで見つかったコードの課題のほとんどを自動的に解決することができます。コードの課題に対して1つ以上のクイックフィックスが利用可能な場合は、キャレットが強調表示されたコード上にあるときに対応するアクションインジケータが表示されます。目的の修正を確認して適用するには、Alt+Enter を押します。

ReSharperは、C++に対して50以上のクイックフィックスを提供します。ここではいくつかの例を示します。

不足している#includeディレクティブを追加する

標準ライブラリまたはソリューションの他の場所で定義されているシンボルを使用する場合、ReSharperは、欠落している #include ディレクティブを自動的に追加できます。

ReSharper: helps adding missing C++ includes automatically

ReSharperオプション(Alt+R O)のコード編集 | C++ | インスペクションページのインポートアクションのポップアップを表示するチェックボックスを使用して、ポップアップを無効にすることができます。チェックボックスが選択されていない場合、対応するアクションは Alt+Enterアクションリストで利用できます。

前方宣言を追加する

ReSharperは、未解決のシンボルの前方宣言も生成できます。

ReSharper: Add forward declaration quick-fix

[[maybe_unused]]を追加

[[maybe_unused]] 属性を追加して、未使用の名前またはエンティティに関するコンパイラからの警告を回避できます。キャレットが未使用のエンティティ上にある場合、次のクイックフィックスが利用可能になります:

Add [[maybe_unused]]

また、別のコンテキストアクションは、UNREFERENCED_PARAMETER および Q_UNUSED の使用を [[maybe_unused]] 属性に置き換えるのに役立ちます。

add [[maybe_unused]]

キャプチャーリストに追加

ローカル変数がラムダ本体の内部で使用されているが、このラムダによってキャプチャーされていない場合、ReSharperはキャプチャーリストを更新するためのクイックフィックスを提案します。値または参照によって変数または this をキャプチャーするか、使用されているすべての自動変数を暗黙的にキャプチャーできます。

ReSharper C++: quick-fix to update the capture list

戻り値の型を変更する

関数の戻り値の型が実際に返す値と一致しない場合、ReSharperを使用すると、戻り値の型をすばやく修正できます。

ReSharper helps fixing types of variables and fields

変数の型を変更する

変数またはフィールドの指定されたタイプが割り当てられた値と一致しない場合、ReSharperは宣言で正しいタイプを使用するためのクイックフィックスを提供します。

ReSharper helps fixing types of variables and fields

宣言を作成する

C++ファイルのメンバー関数のヘッダーファイルに宣言がない場合、ReSharperは実装のシグネチャーに従って欠落している宣言を作成できます。

Generating declaration for C++ class member

使用から作成

宣言されていないシンボルを使用する場合、ReSharperは、使用箇所に基づいてシンボルを作成するための1つ以上のクイックフィックスを提案します。

Generating C++ field from usage

メンバーを初期化する

ReSharperが初期化されていない型メンバーを検出した場合は、1回の修正ですべてのメンバーを初期化することをお勧めします。この修正プログラムのサブメニューを使用して、特定のメンバーの初期化を生成することもできます。

ReSharper C++: quick-fix to initialize members

変数を初期化します

ReSharperは、初期化されていない変数を検出し、デフォルト値で初期化できます。

ReSharper helps initialize variables in C++

未使用の#includeディレクティブを削除する

未使用の #include はすべて強調表示され、クイックフィックスで簡単に削除できます:

Removing unused #include directives

未使用のラムダキャプチャーを削除する

ローカル変数がラムダによってキャプチャーされてもラムダ本体内で使用されない場合、ReSharperは通知し、未使用のキャプチャーを削除するように提案します。

Remove unused lambda capture

ドット(。)を矢印( - >)に置き換えます。逆も同様です

ドット . 演算子が誤ってポインターに適用された場合、ReSharperはそれを矢印 -> 演算子に置き換えるのに役立ちます。

ReSharper helps replacing the dot operator with arrow

逆のクイックフィックスも利用できます:

ReSharper helps replacing the arrow operator with the dot

ラムダで明示的なテンプレートパラメータを使用する

ReSharperは、ラムダが新しいC++20テンプレート構文を使用するように書き換えられる時期を検出します。

Use explicit template parameters in lambda

パラメータのタイプが右辺値参照の場合、そのタイプを直接 std::forwardに渡すことができます。この場合、使い慣れた完全な転送構文を使用できます。

perfect forwarding syntax

static_castを使用

ReSharperは、static_cast を好むべきケースを検出し、コードの更新を支援します。

  • C++キャストの代わりに使用される関数型のキャスト:

    Functional-style cast used instead of a C++ cast

  • void*にキャストするときに、static_cast の代わりにreinterpret_cast が使用されます。

    reinterpret_cast used instead of a static_cast when casting to void*

ReSharperに特定のコードを無視させる

ReSharperを使用すると、特定のファイル、フォルダー、およびファイルマスクをさまざまな方法で無視できます。無視するファイルは、次のオプションページで設定できます。

  • コード・インスペクション | 無視されたコードは、コードインスペクションからファイル、フォルダー、マスクを除外します。

  • コード・インスペクション | 生成されたコードは、生成されたコードのコード インスペクションを部分的に無効にします

  • 環境 | 検索とナビゲーションを使用して、名前で検索コマンドで無視する必要があるファイルとフォルダーを指定します。

  • コード編集 | サードパーティコード は C++、JavaScript、TypeScript、CSS、HTML、JSONファイル、フォルダー、ワイルドカードを追加して、「スキップ」または「ライブラリ」として扱います。ReSharperは「スキップされた」ファイルを完全に無視し、「ライブラリ」ファイルを読み取り専用として扱います。ナビゲーション用にインデックス付けされていますが、インスペクションクイックフィックス、およびリファクタリングはありません。

最終更新日:

関連ページ:

コード解析

ReSharperは、エディター内の単一のステートメントから、ソリューション全体のアーキテクチャまで、さまざまなレベルのコードを分析できます。コードの課題を見つける:ReSharperは、C#、VB.NET、XAML、XML、ASP.NET、ASP.NET MVC、Razor、JavaScript、...

C++のコーディングアシスタンス

ReSharperのコーディング支援機能のほとんどはC++でもサポートされています。これらの機能の詳細については、コーディング支援セクションの対応するトピックを参照してください。このセクションの主なトピックでは、機能マトリックスを見つけて、C++で何がサポートされているのかを確認することもできます。...

コード・インスペクション

ReSharperはサポートされているすべての言語で2500以上のインスペクションを提供します。これらのインスペクションは、開いているすべてのファイルで設計時にコードの課題を検出して強調表示するため、および/または特定の範囲内ですべてのコードの課題を見つけるために使用されます。インスペクション Re...

設計時にコードの課題を検出する

ReSharperは、エディターでコード・ファイルを開くとすぐに分析を開始し、最後まで編集を続けます。検出されたすべてのコードの課題は、重大度に従ってエディターで強調表示されます。課題のマップは、エディターウィンドウの右側のマーカーバーにも表示されます。ここでは、ファイルのステータスを即座に確認し、...

特定の範囲でコードの課題を見つける

設計時コードインスペクションは、エディターでコーディングしたり、特定のファイルを見直したりするときに役立ちます。ただし、ReSharperを使用すると、ソリューション全体または狭い範囲でスタティックコード分析を実行し、結果をフレンドリーな視点で調べることもできます。必要に応じてインスペクション結果を...

コードインスペクション設定の構成

コード注釈を使用して、ReSharperがコードをインスペクションする方法をカスタマイズすることもできます。設計時コードインスペクションを構成する:デフォルトでは、ReSharperは、サポートされている言語に対応するすべてのファイルで設計時コードインスペクションを有効にします。必要に応じて、無効に...