共用方式為


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。

請參閱

其他資源

偵錯工具中的運算式