C++ 中的 Managed 運算式
這個主題適用於:
版本 |
Visual Basic |
C# |
F# |
C++ |
Web Developer |
---|---|---|---|---|---|
Express |
|||||
Pro、Premium 和 Ultimate |
Managed 運算式評估工具可接受大部分以 Visual C++ 撰寫的運算式。 下列主題提供特定的資訊,並討論一些不受支援的運算式類型:
識別項和型別
函式評估
運算子
多載運算子
字串
轉換
物件比較和指派
typeof 和 sizeof 運算子
Boxing
屬性評估
運算式評估工具會忽略存取限定詞 (Qualifier):public、protected、internal 及 private。 例如,您可以從 [監看式] 視窗呼叫 private 方法。
不論執行的程式碼為 safe 或 unsafe,運算式評估工具都會在隱含 unsafe 內容中執行所有評估。
偵錯工具使用自動展開規則 (Rule) 來將資料型別的內容以有意義的形式顯示。 如果需要,您可以加入自訂的自動展開項目來顯示您自己的自訂資料型別。 如需詳細資訊,請參閱顯示自訂資料型別項目。
識別項和型別
偵錯工具運算式可以使用任何在目前範圍 (Scope) 中可見的識別項。 舉例來說,如果偵錯工具在 magh 函式裡中止,您就可以使用任何在 magh 中可見的識別項,包括常數、變數名稱和函式名稱。
偵錯工具可以正確地顯示任何 primitive、enum 或 intrinsic 型別的變數。 對於 class 型別的變數,偵錯工具會根據衍生最徹底的型別來正確地顯示該值。 如果您有一個型別為 lion 的物件 leo (衍生自 cat 型別),您可以評估 leo.clawlength,並取得型別為 lion 之物件的正確值。
您可以指定新數值給任何基本型別 (Primitive Type) 之左值 (L-value) 的左方運算式。 不支援類別和陣列型別的指派。
函式評估
偵錯工具支援函式的評估,包括多載函式。 因此,您可以輸入下列任一運算式,偵錯工具將呼叫多載函式的正確版本:
kanga ()
kanga (roo)
在偵錯工具中評估函式實際上會呼叫並執行該函式的程式碼。 如果函式有副作用,例如配置記憶體或變更全域變數的值,在偵錯工具視窗中評估函式將會變更您的程式狀態,可能會產生非預期的結果。
當您在多載函式上設定一個中斷點時,中斷點的位置視您如何指定函式而定。 如果只有指定函式名稱,偵錯工具將在該函式名稱的每個多載上都設定一個中斷點。 如果指定完整簽章、函式名稱和完整引數清單,偵錯工具會在指定的多載上設定一個中斷點。
運算子
偵錯工具會正確地評估大部分的內建運算子,包括:
關係運算子:(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)。
移位 (Shift) 運算子。 範例:(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.
多載運算子
大部分的多載運算子 (Overload Operator) 都可用在偵錯工具中。
多載中置運算子 +、-、/、% 和 & 可以使用:
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 運算子。
Boxing 和 Unboxing
偵錯工具運算式評估工具並不支援 Visual C++ 中的 Boxing 和 Unboxing。 如需詳細資訊,請參閱 Boxing 和 Unboxing。 如果您有一個整數變數 i,它已經透過 Box 轉換成一個物件,則偵錯工具會將 i 評估為一個整數而非物件。 這個結果可能跟您想的不一樣。
屬性評估
偵錯工具可評估任何變數視窗中的屬性。 然而,在偵錯工具中評估屬性可能有副作用,產生未預期而且不想要的結果。 若要防止意外評估所產生的副作用,您可以關閉 [選項] 對話方塊中的屬性評估。
WebMethod
您不能從偵錯工具視窗中呼叫 WebMethod。