C++ のマネージ式

マネージ式エバリュエーターでは、Visual C++ で記述されたほとんどの式を評価できます。次に示すトピックでは、サポートされている式について詳細に説明します。また、サポートされていない式の種類についても説明します。

  • 識別子と型

  • 関数評価

  • 演算子

  • オーバーロードされた演算子

  • Strings

  • キャスト

  • オブジェクトの比較と代入

  • typeof 演算子と sizeof 演算子

  • ボックス化とボックス化解除

  • プロパティの評価

式エバリュエーターは、アクセス修飾子、public、protected、internal、および private を無視します。たとえば、[ウォッチ] ウィンドウから private メソッドを呼び出すことができます。

式エバリュエーターは、実行対象のコードが安全かどうかにかかわらず、暗黙的な unsafe コンテキストのすべての評価を実行します。

デバッガーは、自動展開規則に基づいてデータ型の内容を意味のある形で表示します。必要な場合は、ユーザーが自動展開規則の項目を追加して、カスタムのデータ型を表示できます。詳細については、「独自のデータ型の要素の表示」を参照してください。

識別子と型

デバッガー式には、現在のスコープで参照できるどの識別子でも使用できます。たとえば、デバッガーが magh 関数で停止した場合、定数、変数名、関数名など、magh で参照できるどの識別子でも使用できます。

デバッガーでは、primitive 型、enum 型、または intrinsic 型のどの変数でも正しく表示できます。class 型の変数については、最派生型に基づいた値を正しく表示できます。cat 型から派生した lion 型の leo オブジェクトがある場合、leo.clawlength を評価し、lion 型のオブジェクトの正しい値を取得できます。

プリミティブ型の左辺値である左側の式には、新しい値を割り当てることができます。クラス型および配列型への代入はサポートされません。

関数評価

デバッガーは、オーバーロードされた関数も含め、関数の評価をサポートしています。したがって、次のいずれかの式を入力すると、オーバーロードされた関数の中から正しい関数が呼び出されます。

kanga ()
kanga (roo)

デバッガーは、関数を評価するときに、その関数のコードを実際に呼び出して実行します。その関数がメモリの割り当てやグローバル変数値の変更などの処理を伴う場合は、デバッガー ウィンドウで関数を評価すると、プログラムの状態が変化して、予測不可能な結果が生じる可能性があります。

オーバーロードされた関数にブレークポイントを設定する場合、ブレークポイントの位置は関数の指定方法によって変わります。関数名だけを指定した場合は、その関数名のオーバーロードごとに 1 つのブレークポイントが設定されます。シグネチャ全体 (関数名とすべての引数のリスト) を指定した場合は、指定されたオーバーロードに 1 つのブレークポイントが設定されます。

演算子

デバッガーは、次の演算子を含む大部分の組み込み演算子を正しく評価します。

  • 関係演算子 : (expr1 >expr2、expr1 < expr2、expr1 <= expr2、expr1 => expr2、expr1 == expr2、expr1 != expr2)。

  • ブール演算子 : (expr1 && expr2、expr1 || expr2)。

  • 条件演算子: (expr1 か。expr2 : expr3)。

  • 算術演算子: (expr1 + expr2、expr1 -expr2、expr1 * expr2、 expr1 / expr2、 expr1 % expr2)。

  • ビット処理演算子: (expr1 & expr2、expr1 ^ expr2、expr1 |expr2、expr1 ~ expr2)。

  • シフト演算子。例: (expr1 の >>expr2、 expr1 の <<expr2、 expr1 の >>> expr2)。

  • 代入演算子: ( 左辺値 = expr2の 左辺値 の *= expr2、 左辺値 /= expr2、 左辺値 %= expr2、 左辺値expr2左辺値 +=、 - = expr2の 左辺値 の <<= expr2の 左辺値 の >>=expr2の 左辺値 の &= expr2の 左辺値 の ^= expr2、 左辺値 |= expr2 )。

  • 単項演算子。例: (expr1+、 -、 ++、 expr1expr1C++expr1、 expr1--、 --expr1 )。

一連の式を入力するには、コンマ演算子を使用する場合: expr1、 expr2、expr3。

オーバーロードされた演算子

デバッガーでは、オーバーロードされた演算子の大部分を使用できます。

オーバーロードされた挿入演算子 +、-、/、%、および & は使用できます。

  • expr1 + expr2

  • expr1expr2

  • expr1 / expr2

  • expr1 % expr2

  • expr1 & expr2

オーバーロードされた挿入演算子 =、&&、&、||、|、および ^ は使用できません。

  • expr1 = expr2

  • expr1 && expr2

  • expr1 & expr2

  • expr1 || expr2

  • expr1 | expr2

  • expr1 ^ expr2

C++ では、オーバーロードされた関係演算子 ==、!=、>、<、>=、および <= は使用できません。

  • expr1 == expr2

  • expr1 != expr2

  • expr1 > expr2

  • expr1 < expr2

  • expr1 >= expr2

  • expr1 <= expr2

オーバーロードされた挿入演算子 |、^、<<、>>、>、<、>=、および <= は使用できません。

  • expr1 | expr2

  • expr1 ^ expr2

  • expr1 << expr2

  • expr1 >> expr2

  • expr1 > expr2

  • expr1 < expr2

  • expr1 >= expr2

  • expr1 <= expr2

オーバーロードされた前置演算子 +、-、++、--、!、および ~ は使用できます。

  • +expr1

  • -expr1

  • C++expr1

  • --expr1

  • !expr1

  • |expr1

オーバーロードされた後置演算子 ++ および -- は使用できます。

  • expr1++

  • expr1--

オーバーロードされた [] 演算子は使用できます。

  • x[expr2]

多次元配列

C++ の式エバリュエーターでは、多次元配列には C# 形式の構文を使用します。次に例を示します。

c[0,0]

通常の C++ 構文を使用すると、エラーが発生します。

c[0][0] のエラー: ポインターと配列 " c " の境界からのインデックス " 0 "

Strings

デバッガーでは、配列のインデックス演算子だけでなく、文字列のインデックス演算子も認識されます。たとえば、次のように入力できます。

"hello world"[0]

[ウォッチ] ウィンドウに、正しい値が表示されます。

'h'

キャスト

デバッガーでは、簡単なキャスト式を使用できます。

(A)x

ポインターを含むキャストは使用できません。

デバッガーでのユーザー定義のキャストは、Visual C++ では使用できません。

オブジェクトの比較と代入

デバッガーでのオブジェクトの比較と代入は、Visual C++ では使用できません。

typeof 演算子と sizeof 演算子

デバッガーでは、typeof 演算子と sizeof 演算子を使用できます。これらの演算子は、対応する .NET Framework の関数に変換されて使用されます。

typeof ( expression)

これは次のように変換されます。

System.Type.GetType(expression )

デバッガーは、変換後の式を評価します。

デバッガーでは sizeof 演算子をサポートしていません。

ボックス化とボックス化解除

デバッガーの式エバリュエーターは、Visual C++ でのボックス化とボックス化解除をサポートしていません。詳細については、「ボックス化とボックス化解除」を参照してください。整数型変数 i をボックス化によってオブジェクトに変換した場合、デバッガーは i をオブジェクトとしてではなく整数として評価します。そのため、予想外の結果が生じる場合があります。

プロパティの評価

デバッガーは、どの変数ウィンドウでもプロパティを評価できます。ただし、デバッガーでプロパティを評価すると、予測不可能な結果や望ましくない結果が生じる場合があります。予定外の評価によるそのような結果が発生しないようにするには、[オプション] ダイアログ ボックスでプロパティ評価をオフにします。

WebMethods

デバッガー ウィンドウで WebMethods を呼び出すことはできません。

参照

その他の技術情報

デバッガー内の式