safe_cast (Extensões de Componentes C++)
A operação safe_cast retorna a expressão especificada como o tipo especificado, se tiver êxito; caso contrário, lança InvalidCastException.
Todos os tempos de execução
(Não há nenhum comentário sobre este recurso de linguagem que se aplica a todos os tempos de execução).
Sintaxe
[default]::safe_cast<type-id>(expression)
Tempo de Execução do Windows
safe_cast permite que você altere o tipo de uma expressão especificada.Em situações onde você só espera uma variável ou um parâmetro a ser conversível para um determinado tipo, poderá usar safe_cast sem um bloco try-catch para detectar erros de programação durante o desenvolvimento.Para obter mais informações, consulte Conversão (C++/CX).
Sintaxe
[default]::safe_cast<type-id>(expression)
Parâmetros
identificação do tipo
O tipo para o qual a expressão será convertida.Um manipulador para um tipo de referência ou de valor, ou uma referência de controle para um tipo de referência ou de valor.expressão
Uma expressão avaliada para um manipulador para um tipo de referência ou de valor, ou uma referência de controle para um tipo de referência ou de valor.
Comentários
safe_cast gera InvalidCastException se não pode converter expressão para o tipo especificado por identificação de tipo.Para capturar InvalidCastException, especifique a opção de compilador /EH (modelo de manipulação de exceção) e use uma instrução try/catch.
Requisitos
Opção do compilador: /ZW
Exemplos
Exemplo
O 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);
}
}
Saída
Common Language Runtime
safe_cast permite que você altere o tipo de uma expressão e gere código MSIL verificável.
Sintaxe
[cli]::safe_cast<type-id>(expression)
Parâmetros
identificação do tipo
Um manipulador para um tipo de referência ou de valor, ou uma referência de controle para um tipo de referência ou de valor.expressão
Uma expressão avaliada para um manipulador para um tipo de referência ou de valor, ou uma referência de controle para um tipo de referência ou de valor.
Comentários
A expressão safe_cast<identificação de tipo>(expressão) converte a expressão de operando em um objeto do tipo identificação de tipo.
O compilador aceitará um static_cast na maioria dos locais que aceitem um safe_cast.No entanto, é garantido que safe_cast produza um MSIL verificável, onde como um static_cast poderia produzir MSIL não verificável.Consulte Código puro e verificável (C + + / CLI) e Peverify (ferramenta PEVerify) para obter mais informações sobre código verificável.
Como static_cast, safe_cast chama conversões definidas pelo usuário.
Para obter mais informações sobre conversões, consulte Operadores de conversão.
safe_cast não aplica um const_cast (const rejeitado).
safe_cast está no namespace cli.Consulte Namespaces Plataforma, padrão e cli (Extensões de Componentes C++) para maiores informações.
Para obter informações sobre safe_cast, consulte:
Requisitos
Opção do compilador: /clr
Exemplos
Exemplo
Um exemplo de onde o compilador não aceitará static_cast mas aceitará safe_cast é para conversões entre tipos de interface não relacionados.Com o safe_cast, o compilador não emitirá um erro de conversão e executará uma verificação em tempo de execução para ver se a conversão é 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");
}
}
Saída
Consulte também
Conceitos
Extensões de componente para plataformas de tempo de execução