C++ のマネージ式
マネージ式エバリュエーターでは、Visual C++ で記述されたほとんどの式を評価できます。 次に示すトピックでは、サポートされている式について詳細に説明します。また、サポートされていない式の種類についても説明します。
識別子と型
関数評価
演算子
オーバーロードされた演算子
文字列
キャスト
オブジェクトの比較と代入
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)。
代入演算子: (lvalue = expr2、lvalue *= expr2、lvalue /= expr2、lvalue %= expr2、lvalue += expr2、lvalue -= expr2、lvalue <<= expr2、lvalue >>=expr2、lvalue &= expr2、lvalue ^= expr2、lvalue |= expr2)。
単項演算子。 例: (+expr1、- expr1、expr1++、++expr1、expr1--、--expr1)。
コンマ演算子を使用すると、一連の式 (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
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
++expr1
--expr1
!expr1
~expr1
オーバーロードされた後置演算子 ++ および -- は使用できます。
expr1++
expr1--
オーバーロードされた [] 演算子は使用できます。
- x[expr2]
多次元配列
C++ の式エバリュエーターでは、多次元配列には C# 形式の構文を使用します。 次に例を示します。
c[0,0]
通常の C++ 構文を使用すると、エラーが発生します。
c[0][0] エラー: インデックス '0' は、ポインター/配列 'c' の範囲外にあります
文字列
デバッガーでは、配列のインデックス演算子だけでなく、文字列のインデックス演算子も認識されます。 たとえば、次のように入力できます。
"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 を呼び出すことはできません。