ReSharper 2026.1 Help

C++ でのコード分析

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

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

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

コードインスペクション

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

さらに、実行時に見つかる他のコードの問題も検出します。 例: コンストラクターで仮想メソッドを使用すると、 この StackOverflow の質問(英語)で説明したように予期しない動作が発生します。 ReSharper は、コンパイル前にこの問題を指摘します:

ReSharper の警告。 コンストラクター内の仮想メソッド

分析は、 コードインスペクション現在の文書または指定された範囲に適用することによって実行さ れます

コードインスペクションは C++ プロジェクトになります

ReSharper が提供するコードインスペクションの種類を調べるには、 ReSharper C++ コードインスペクションの全リストを確認してください。

コードインスペクションの詳細については、「コードインスペクション設定を構成する 」を参照してください。

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

C++ でインスペクションを無効にする

ReSharper 固有の属性を使って一部のインスペクションを抑制することもできます。 詳細については、 インスペクションを絞り込むために属性を使用セクションを参照してください。

クイックフィックス

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

ReSharper は C++ 用に 290 件を超えるクイックフィックスを提供します。 以下にいくつか例を挙げます。

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

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

ReSharper: 欠落している C++ インクルードを自動的に追加できます

コード編集 | C++ | インスペクション ページ内の インポートアクションのポップアップを表示する チェックボックスを使って、ReSharper オプション Alt+R、O のポップアップを無効化できます。

チェックボックスが選択されていない場合、 Alt+Enter を押すと、 対応するアクションがアクションリストで使用可能になります。

前方宣言を追加する

未解決のシンボルに対しても、ReSharper は事前宣言を生成できます:

ReSharper: 前方宣言のクイックフィックスを追加

[[maybe_unused]] を追加

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

[[maybe_unused]] を追加

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

[[maybe_unused]] を追加

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

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

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

戻り値の型を変更する

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

ReSharper は変数やフィールドの種類を修正できます

変数型の変更

変数やフィールドの指定型が割り当て値と一致しない場合、ReSharper は宣言で正しい型を使うクイックフィックスを提案します:

ReSharper は変数やフィールドの種類を修正できます

宣言を作成する

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

C++ クラスメンバーの宣言を生成する

使用箇所から作成

宣言されていないシンボルを使用する場合、ReSharper は使用状況に応じてシンボルを作成する 1 つ以上のクイックフィックスを提案します:

用途から C++ 項目を生成

メンバーを初期化する

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

ReSharper C++: メンバーを初期化するためのクイックフィックス

変数の初期化

ReSharper は初期化されていない変数を検出し、デフォルト値で初期化するのを支援します:

ReSharper は C++ の変数を初期化できます

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

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

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

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

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

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

ドット(.)と矢印(->)を相互に置き換える

ドット . 演算子が誤ってポインターに使われた場合、ReSharper が矢印 -> 演算子への置換をサポートします:

ReSharper はドット演算子を矢印に置き換えるのに役立ちます

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

ReSharper は矢印演算子をドットに置き換えるのに役立ちます

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

ReSharper はラムダが新しい C++20 テンプレート構文で書き換え可能な場合を検出します:

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

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

perfect forwarding syntax

static_cast を使う

ReSharper は static_cast を推奨すべきケースを検出し、コードの更新をサポートします:

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

    C++ キャストの代わりに使用される関数型のキャスト
  • void* へのキャスト時に、 static_cast の代わりに reinterpret_cast が使用されます:

    void にキャストするときに static_cast の代わりに reinterpret_cast を使用 *

属性を使用してインスペクションを調整する

ReSharper 固有の属性をソースコードのシンボルに追加し、ReSharper によるより正確かつインサイトのある分析を実現できます。 ReSharper では、次のカスタム属性 [[jetbrains::format]][[jetbrains::guard]][jetbrains::pass_by_value]] 、および [[jetbrains::has_side_effects]] を利用できます。

[[jetbrains::format]] 属性を使用すると、カスタム printf-like 関数の形式インスペクションを有効にすることができ、 [[gnu::format]] と同様に機能します。

[[jetbrains::format]]

[[jetbrains::pass_by_value]] 属性を使用すると、「const 参照による値の受け渡し」インスペクションを抑制できます。 コメントでインスペクションを無効にする代わりに、抑制属性を使用するのはなぜでしょうか。 特定のクラスまたは構造体の警告を表示したくない場合は、いつでも Alt+Enter メニューから インスペクション: … | コメントで一度無効にする を選択して、現在の行またはファイルでインスペクションを抑制するコメントを追加できます。 その後、すべてのクラスの使用に対しても抑制コメントを追加する必要があります。 このような場合、クラス宣言で抑制属性を 1 回指定する方がはるかに簡単です。

[[jetbrains::pass_by_value]]

[[jetbrains::guard]] 属性を使用すると、「ローカル変数は使用されない」インスペクションを抑制できます。 クラスにこの属性を付けることで、そのクラスがコンストラクターで重要な作業を行うことを ReSharper に通知できます。

template<class Mutex> class [[jetbrains::guard]] my_lock_guard { explicit my_lock_guard(Mutex &); };

[[jetbrains::has_side_effects]] 属性を使用すると、 operator= に副作用があるとしてマークを付け、「割り当てられた値は使用されない」インスペクションを抑制できます。

struct A { A& operator = (int); [[jetbrains::has_side_effects]] A& operator = (float); }; void foo(A a) { a = 3; // warning "Assigned value is never used" a = 3.f; // no warnings here a = A(); // warning "Assigned value is never used" }

外部ライブラリのライブラリクラスに ReSharper 属性を適用する必要がある場合、代わりに前方クラス宣言にその属性を使うこともできます: class [[jetbrains::pass_by_value]] my_class;

コンパイラーが不明な属性に関する警告を表示した場合は、 __JETBRAINS_IDE__ マクロまたは __RESHARPER__ マクロを使用して宣言を保護できます。

#ifdef __JETBRAINS_IDE__ class [[jetbrains::pass_by_value]] my_class; #endif

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

ソリューションのコードの一部をコード解析、ナビゲーション、その他の機能から除外するために、ReSharper では さまざまな方法で特定のファイル、フォルダー、ファイルマスクを無視できます

2026 年 6 月 12 日