Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
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