다음을 통해 공유


safe_cast(C++ 구성 요소 확장)

safe_cast 작업은 성공하는 경우 지정된 형식으로 지정된 식을 반환하고, 그렇지 않으면 InvalidCastException을 throw합니다.

모든 런타임

(모든 런타임에 적용되는 이 언어 기능에 대한 설명이 없습니다.)

23b7yy6w.collapse_all(ko-kr,VS.110).gif구문

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

Windows 런타임

safe_cast를 사용하면 지정된 식의 형식을 변경할 수 있습니다.변수 또는 매개 변수가 특정 유형으로 변환되어야 하는 상황에서는 try-catch 블록 없이 safe_cast를 사용하여 개발 중 프로그래밍 오류를 발견할 수 있습니다.자세한 내용은 캐스팅(C++/CX)을 참조하십시오.

23b7yy6w.collapse_all(ko-kr,VS.110).gif구문

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

23b7yy6w.collapse_all(ko-kr,VS.110).gif매개 변수

  • type-id
    expression을 변환할 대상 형식입니다.참조 또는 값 형식에 대한 핸들, 값 형식, 또는 참조 또는 값 형식에 대한 추적 참조입니다.

  • expression
    참조 또는 값 형식에 대한 핸들, 값 형식, 또는 참조 또는 값 형식에 대한 추적 참조로 계산되는 식입니다.

23b7yy6w.collapse_all(ko-kr,VS.110).gif설명

safe_cast는 expression을 type-id에서 지정한 형식으로 변환할 수 없는 경우 InvalidCastException을 throw합니다.InvalidCastException을 catch하려면 /EH(예외 처리 모델) 컴파일러 옵션을 지정하고 try/catch 문을 사용합니다.

23b7yy6w.collapse_all(ko-kr,VS.110).gif요구 사항

컴파일러 옵션: /ZW

23b7yy6w.collapse_all(ko-kr,VS.110).gif예제

예제

다음 코드 예제에서는 safe_cast를 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);
   }
}

Output

  

공용 언어 런타임

safe_cast를 사용하면 식의 형식을 변경하고 확인 가능한 MSIL 코드를 생성할 수 있습니다.

23b7yy6w.collapse_all(ko-kr,VS.110).gif구문

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

23b7yy6w.collapse_all(ko-kr,VS.110).gif매개 변수

  • type-id
    참조 또는 값 형식에 대한 핸들, 값 형식, 또는 참조 또는 값 형식에 대한 추적 참조입니다.

  • expression
    참조 또는 값 형식에 대한 핸들, 값 형식, 또는 참조 또는 값 형식에 대한 추적 참조로 계산되는 식입니다.

23b7yy6w.collapse_all(ko-kr,VS.110).gif설명

safe_cast<type-id>(expression) 식은 연산자 식을 type-id 형식의 개체로 변환합니다.

컴파일러는 safe_cast를 받을 대부분의 장소에서 static_cast를 받습니다.그러나 safe_cast는 확인할 수 있는 MSIL을 생성하는 것이 보장됩니다. static_cast는 확인할 수 없는 MSIL을 생성할 수 있습니다.안정형 코드에 대한 자세한 내용은 순수형 및 안정형 코드(C++/CLI)Peverify.exe(PEVerify 도구)를 참조하십시오.

static_cast와 마찬가지로 safe_cast는 사용자 정의 변환을 호출합니다.

cast에 대한 자세한 내용은 캐스팅 연산자를 참조하십시오.

safe_castconst_cast(cast away const)를 적용하지 않습니다.

safe_cast는 cli 네임스페이스에 있습니다.자세한 내용은 Platform, default 및 cli 네임스페이스(C++ 구성 요소 확장)를 참조하십시오.

safe_cast에 대한 자세한 내용은 다음을 참조하십시오.

23b7yy6w.collapse_all(ko-kr,VS.110).gif요구 사항

컴파일러 옵션: /clr

23b7yy6w.collapse_all(ko-kr,VS.110).gif예제

예제

컴파일러가 static_cast는 허용하지 않지만 safe_cast는 허용하는 한 가지 예는 관련 없는 인터페이스 형식 사이의 캐스트입니다.safe_cast를 사용하면 컴파일러는 변환 오류를 발행하고 캐스팅이 가능한지 확인하기 위해 런타임에 검사를 수행합니다.

// 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");
   }
}

Output

  

참고 항목

개념

런타임 플랫폼의 구성 요소 확장