Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
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