C++ のマネージ式
更新 : 2007 年 11 月
このトピックの内容は、次の製品に該当します。
Edition |
Visual Basic |
C# |
C++ |
Web Developer |
---|---|---|---|---|
Express |
||||
Standard |
||||
Pro/Team |
表の凡例 :
対象 |
|
該当なし |
|
既定で非表示のコマンド |
マネージ式エバリュエータでは、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
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
++ 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 を呼び出すことはできません。