共用方式為


C++ 中的 Managed 運算式

Managed 運算式評估工具可接受以 Visual C++ 所撰寫的大部分運算式。 下列主題提供特定的資訊,並討論一些不受支援的運算式類型:

  • 識別項和類型

  • 函式評估

  • 運算子

  • 多載運算子

  • 字串

  • 轉型

  • 物件比較和指派

  • typeof 和 sizeof 運算子

  • Boxing

  • 屬性評估

運算式評估工具會忽略存取限定詞 public、protected、internal 及 private。 例如,您可以從 [監看式] 視窗呼叫 private 方法。

不論執行的程式碼為安全 safe 或 unsafe,運算式評估工具都會在隱含的 unsafe 內容中執行所有評估。

偵錯工具會使用自動展開規則,以有意義的形式顯示資料類型的內容。 如有需要,您可以加入自訂的自動展開項目來顯示自己的自訂資料類型。 如需詳細資訊,請參閱顯示自訂資料類型的項目

識別項和類型

偵錯工具運算式可以使用目前範圍內可見的任何識別項。 例如,如果偵錯工具在 magh 函式中停止,您可以使用 magh 內可見的任何識別項,包括常數、變數名稱和函式名稱。

偵錯工具可以正確顯示 primitive、enum 或 intrinsic 類型的任何變數。 對於 class 類型的變數,偵錯工具會根據最具衍生性的類型正確顯示值。 如果您擁有 lion 類型的 leo 物件,而該類型衍生自 cat 類型,您可以求得 leo.clawlength 的值並取得 lion 類型物件的正確值。

您可以將新值指派給任何本身是基本類型 (Primitive Type) 之左值的左方運算式。 不支援類別和陣列類型的指派。

函式評估

偵錯工具支援計算函式的值,包括多載函式。 因此,您可以輸入下列任一運算式,偵錯工具將呼叫正確的多載函式版本:

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).

  • 移位運算子。 範例:(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 運算子。

Boxing 和 Unboxing

偵錯工具運算式評估工具不支援 Visual C++ 中的 Boxing 和 Unboxing。 如需詳細資訊,請參閱 Boxing 和 Unboxing。 如果您的整數變數 i 已透過 Boxing 轉換成物件,則偵錯工具計算 i 的結果會是整數而非物件。 結果可能跟您所預期的不同。

屬性評估

偵錯工具可以計算任何變數視窗中屬性的值。 不過,在偵錯工具中計算屬性的值可能有副作用,會產生非預期和不想要的結果。 若要防止意外求值所產生的副作用,您可以在 [選項] 對話方塊中關閉屬性求值。

WebMethod

您無法從偵錯工具視窗呼叫 WebMethod。

請參閱

其他資源

偵錯工具中的運算式