Compartilhar via


Gerenciado expressões em C++

Este tópico se aplica a:

Edição

Visual Basic

C#

C++

Desenvolvedores Web

Express

Padrão

PRO e equipe

Legenda de tabela:

Aplica-se

Não é aplicada

Comando ou comandos oculta por padrão.

O avaliador da expressão gerenciado aceita a maioria das expressões escritas em Visual C++. Os tópicos a seguir oferecem informações específicas e discutem alguns dos tipos de expressão que não são suportados:

  • Identificadores e tipos

  • Função de avaliação

  • Operadores

  • Operadores sobrecarregados

  • Sequências

  • Conversões

  • Comparação de objeto e atribuição

  • Operadores typeof e sizeof

  • Conversão boxing

  • Propriedade de avaliação

O avaliador da expressão ignora os qualificadores de acesso, public, protected, internal, e private. Você pode chamar um private método a partir do Observação janela, por exemplo.

O avaliador da expressão executa todas as avaliações em um contexto seguro implícito, se o código que sendo executado é seguro ou não seguro.

O depurador usa regras autoexpand para exibir o Sumário de um tipo de dados no formulário significativo.Se você precisar, você pode adicionar elementos personalizados autoexpand para exibir seus próprios tipos de dados personalizados.Para obter mais informações, consulte Exibindo elementos de um tipo de dados personalizados.

Identificadores e tipos

Expressões de depurador podem usar qualquer identificador visível dentro do escopo atual.Se o depurador é interrompido na função magh, por exemplo, você pode usar qualquer identificador visível dentro magh, incluindo constantes, nomes de variáveis e nomes de função.

O depurador corretamente pode exibir qualquer variável de um primitive, enum, ou intrinsic Digite. Para variáveis de class tipo, o depurador corretamente exibe o valor com base no tipo mais derivado. Se você tiver um objeto leo do tipo lion, derivado do tipo cat, você pode avaliar leo.clawlength e obter o valor correto para um objeto do tipo lion.

Você pode atribuir um novo valor a qualquer expressão canhotos hand lado que é um l-value de um tipo primitivo.Não há suporte para as atribuições para tipos de classe e array.

Função de avaliação

O depurador oferece suporte a avaliação de funções, incluindo funções sobrecarregadas.Portanto, você pode inserir qualquer uma das expressões a seguir, e o depurador chamará a versão correta da função sobrecarregada:

kanga ()
kanga (roo)

Na verdade avaliar uma função no depurador chama e executa o código para essa função.Se a função possui efeitos colaterais, como alocar memória ou alterar o valor de uma variável global, avaliar a função em uma janela de depurador alterará o estado de seu programa, que pode produzir resultados inesperados.

Quando você definir um ponto de interrupção em uma função sobrecarregada, o local do ponto de interrupção depende de como você especificar a função.Se você especificar somente o nome da função será definido um ponto de interrupção em cada sobrecarga com esse nome de função.Se você especificar a assinatura completa, o nome da função e a lista de argumentos completa, o depurador define um ponto de interrupção na sobrecarga especificada.

Operadores

O depurador corretamente avalia os operadores mais internos , incluindo:

  • Operadores relacionais: (expr1 >expr2, expr1 < expr2, expr1 <= expr2, expr1 => expr2, expr1 == expr2, expr1 != expr2).

  • Operadores booliano: (expr1 && expr2, expr1 || expr2).

  • Operador condicional: (expr1 ?expr2 : expr3) .

  • Operadores aritméticos: ( expr1 + expr2, expr1 - expr2,expr1 * expr2, expr1 / expr2, expr1 % expr2).

  • Operadores bit a bit: (expr1 & expr2, expr1 ^ expr2, expr1 | expr2, expr1 ~ expr2).

  • Deslocar operadores.Exemplos: (expr1 >> expr2, expr1 << expr2, expr1 >>> expr2).

  • Operadores de atribuição: ( lvalue = expr2, lvalue *= expr2, lvalue /= expr2, lvalue %= expr2, lvalue += expr2, lvalue -= expr2, lvalue <<= expr2, lvalue >>=expr2, lvalue &= expr2, lvalue ^= expr2, lvalue |= expr2 ).

  • Operadores unários.Exemplos: ( + expr1, - expr1, expr1++, ++ expr1, expr1--, -- expr1 ).

Você pode usar o operador vírgula para inserir uma série de expressões: expr1, expr2,expr3.

Operadores sobrecarregados

A maioria do trabalho dos operadores sobrecarregados é no depurador.

Sobrecarga nos operadores fixos +,-, /, %, e & funcionam:

  • expr1 + expr2

  • expr1expr2

  • expr1 / expr2

  • expr1 % expr2

  • expr1 & expr2

Sobrecarga nos operadores fixos =, &&, &, ||, |, e ^ não funcionam:

  • expr1 = expr2

  • expr1 && expr2

  • expr1 & expr2

  • expr1 || expr2

  • expr1 | expr2

  • expr1 ^ expr2

Operadores relacionais sobrecarregado ==,! =, >, <, > =, e < = não funcionam para C++:

  • expr1 == expr2

  • expr1 != expr2

  • expr1 > expr2

  • expr1 < expr2

  • expr1 >= expr2

  • expr1 <= expr2

Sobrecarga nos operadores fixos |, ^, <<, >>, >, <, > =, e < = não funcionam:

  • expr1 | expr2

  • expr1 ^ expr2

  • expr1 << expr2

  • expr1 >> expr2

  • expr1 > expr2

  • expr1 < expr2

  • expr1 >= expr2

  • expr1 <= expr2

Sobrecarga nos prefixos dos operadores +, -, --, !, e ~ funcionam:

  • + expr1

  • - expr1

  • ++ expr1

  • -- expr1

  • ! expr1

  • ~ expr1

Sobrecarga nos sufixos dos operadores ++ e -- funcionam:

  • expr1++

  • expr1--

O operador [] sobrecarga funciona:

  • x[expr2]

Matrizes multidimensionais

O avaliador de expressão C++ usa a sintaxe de estilo translation from VPE for Csharp para matrizes multidimensionais.Por exemplo:

c[0,0]

Usando a sintaxe do C++ normal gera um erro:

c[0][0] Erro: índice '0' fora do limite ponteiro/array 'c'

Sequências

O depurador reconhecerá o operador indexado quando ele é usado com sequências, bem como matrizes.Assim, por exemplo, você pode inserir:

"hello world"[0]

A janela Watch exibirá o valor correto:

'h'

Conversões

Expressões de conversão simples e funcionam no depurador:

(A)x

Casts que envolvem ponteiros não funcionará no depurador:

Conversões definidas pelo usuário não funcionam no depurador para Visual C++.

Comparação de objeto e atribuição

Comparação de objeto e atribuição no depurador não funciona para Visual C++.

Operadores typeof e sizeof

O depurador oferece suporte os operadores typeof e sizeof os transformando em equivalentes as funções no .NET Framework

typeof ( expression )

é transformada em:

System.Type.GetType(expression )

O depurador depois avalia a expressão transformada.

O depurador não oferece suporte a sizeof operador.

conversão boxing e conversão conversão unboxing

O avaliador da expressão do depurador não oferece suporte a conversão boxing e conversão conversão unboxing em Visual C++. Para obter mais informações, consulte conversão boxing e conversão conversão unboxing.Se você tiver um número inteiro variável i que foi convertido em um objeto por meio da conversão boxing, o depurador irá avaliar i sistema autônomo um inteiro, não sistema autônomo um objeto. Os resultados não podem ser esperada.Para obter mais informações sobre como conversão boxing afeta valores, consulte Conversão boxing.

Propriedade de avaliação

O depurador pode avaliar as propriedades em qualquer janela variável.No entanto, avaliar uma propriedade no depurador pode ter efeitos colaterais que produzem resultados inesperados e indesejados.Para se proteger contra efeitos colaterais causados por avaliações acidentais, você pode desativar propriedade avaliação na caixa de diálogo Options.

WebMethods

Não é possível chamar WebMethods do depurador de janelas.

Consulte também

Outros recursos

Expressões no depurador