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 を呼び出すことはできません。