Partilhar via


safe_cast (C++/CLI e C++/CX)

A safe_cast operação retorna a expressão especificada como o tipo especificado. Se a operação não for bem-sucedida, ele lançará um InvalidCastExceptionarquivo .

All Runtimes

(Não há comentários para esse recurso de linguagem que se apliquem a todos os tempos de execução.)

Syntax

[default]:: safe_cast< type-id >( expression )

Windows Runtime

Use safe_cast para alterar o tipo de uma expressão especificada. If you expect a variable or parameter to be convertible to a certain type, use safe_cast without a try-catch block to detect programming errors during development. For more information, see Casting (C++/CX).

Syntax

[default]:: safe_cast< type-id >( expression )

Parameters

type-id
The type to convert expression to. Um identificador para uma referência ou tipo de valor, um tipo de valor ou uma referência de acompanhamento para uma referência ou tipo de valor.

expression
Uma expressão que é avaliada como um identificador para uma referência ou tipo de valor, um tipo de valor ou uma referência de acompanhamento para uma referência ou tipo de valor.

Remarks

safe_cast throws InvalidCastException if it can't convert expression to the type specified by type-id. To catch InvalidCastException, specify the /EH (Exception Handling Model) compiler option, and use a try/catch statement.

Requirements

Opção do compilador: /ZW

Examples

O exemplo de código a seguir demonstra como usar safe_cast com o Tempo de Execução do Windows.

// safe_cast_ZW.cpp
// compile with: /ZW /EHsc

using namespace default;
using namespace Platform;

interface class I1 {};
interface class I2 {};
interface class I3 {};

ref class X : public I1, public I2 {};

int main(Array<String^>^ args) {
   I1^ i1 = ref new X;
   I2^ i2 = safe_cast<I2^>(i1);   // OK, I1 and I2 have common type: X
   // I2^ i3 = static_cast<I2^>(i1);   C2440 use safe_cast instead
   try {
      I3^ i4 = safe_cast<I3^>(i1);   // Fails because i1 is not derived from I3.
   }
   catch(InvalidCastException^ ic) {
   wprintf(L"Caught expected exception: %s\n", ic->Message);
   }
}
Caught expected exception: InvalidCastException

Ambiente de Execução de Linguagem Comum

safe_cast altera o tipo de uma expressão e gera código MSIL verificável.

Syntax

[cli]:: safe_cast< type-id >( expression )

Parameters

type-id
Um identificador para uma referência ou tipo de valor, um tipo de valor ou uma referência de acompanhamento para uma referência ou tipo de valor.

expression Uma expressão que é avaliada como um identificador para uma referência ou tipo de valor, um tipo de valor ou uma referência de acompanhamento para uma referência ou tipo de valor.

Remarks

The expression safe_cast<type-id>(expression) converts the operand expression to an object of type type-id.

O compilador aceita um static_cast na maioria dos lugares que ele aceita um safe_castarquivo . No entanto, safe_cast sempre produz MSIL verificável, enquanto um static_cast pode produzir MSIL não verificável. Para obter mais informações sobre código verificável, consulte Código puro e verificável (C++/CLI) e Peverify.exe (PEVerify Tool).

Como static_cast, safe_cast invoca conversões definidas pelo usuário.

For more information about casts, see Casting Operators.

safe_cast não aplica um const_cast (náufrago const).

safe_cast está no namespace da CLI. Para obter mais informações, consulte Namespaces de plataforma, padrão e cli.

Para mais informações sobre safe_cast, consulte:

Requirements

Opção do compilador: /clr

Examples

Um exemplo de onde o compilador não aceita um static_cast , mas aceita um safe_cast , é para transmissões entre tipos de interface não relacionados. Com safe_casto , o compilador não emite um erro de conversão e executa uma verificação no tempo de execução para ver se o elenco é possível.

// safe_cast.cpp
// compile with: /clr
using namespace System;

interface class I1 {};
interface class I2 {};
interface class I3 {};

ref class X : public I1, public I2 {};

int main() {
   I1^ i1 = gcnew X;
   I2^ i2 = safe_cast<I2^>(i1);   // OK, I1 and I2 have common type: X
   // I2^ i3 = static_cast<I2^>(i1);   C2440 use safe_cast instead
   try {
      I3^ i4 = safe_cast<I3^>(i1);   // fail at runtime, no common type
   }
   catch(InvalidCastException^) {
      Console::WriteLine("Caught expected exception");
   }
}
Caught expected exception

See also

Extensões de componente para .NET e UWP