Compartir vía


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

La safe_cast operación devuelve la expresión especificada como el tipo especificado. Si la operación no se realiza correctamente, produce una InvalidCastExceptionexcepción .

All Runtimes

(No hay notas para esta característica de lenguaje que se apliquen a todos los runtimes).

Syntax

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

Windows Runtime

Use safe_cast para cambiar el tipo de una expresión 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. Identificador de un tipo de valor o referencia, un tipo de valor o una referencia de seguimiento a una referencia o tipo de valor.

expression
Expresión que evalúa a un identificador de un tipo de valor o referencia, un tipo de valor o una referencia de seguimiento a una referencia o 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

Opción del compilador: /ZW

Examples

En el ejemplo de código siguiente se muestra cómo usar safe_cast con Windows Runtime.

// 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

Entorno de ejecución de lenguaje común

safe_cast cambia el tipo de una expresión y genera código MSIL verificable.

Syntax

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

Parameters

type-id
Identificador de un tipo de valor o referencia, un tipo de valor o una referencia de seguimiento a una referencia o tipo de valor.

expression Expresión que se evalúa como un identificador para un tipo de referencia o valor, un tipo de valor o una referencia de seguimiento a un tipo de referencia o valor.

Remarks

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

El compilador acepta en static_cast la mayoría de los lugares que acepta .safe_cast Sin embargo, safe_cast siempre genera MSIL verificable, mientras que un static_cast puede producir MSIL no verificable. Para obtener más información sobre el código verificable, vea Código puro y verificable (C++/CLI) y Peverify.exe (herramienta PEVerify).

Al igual que static_cast, safe_cast invoca conversiones definidas por el usuario.

For more information about casts, see Casting Operators.

safe_cast no aplica una const_cast clase (cast away const).

safe_cast está en el espacio de nombres cli. Para obtener más información, consulte Plataforma, valor predeterminado y espacios de nombres de cli.

Para obtener más información sobre safe_cast, vea:

Requirements

Opción del compilador: /clr

Examples

Un ejemplo de dónde el compilador no acepta un static_cast pero acepta un es para conversiones safe_cast entre tipos de interfaz no relacionados. Con safe_cast, el compilador no emite un error de conversión y realiza una comprobación en tiempo de ejecución para ver si la conversión es posible.

// 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

Extensiones de componentes de .NET y UWP