c++강제 형식 변환 에 대한 상세 한 설명
형식 변환 의 의 미 는 하나의 변수의 유형 을 다른 유형 으로 바 꾸 어 이 변수의 표현 방식 을 바 꾸 는 것 이다.유형 을 위해 간단 한 대상 을 다른 대상 으로 바 꾸 려 면 전통 적 인 유형 변환 조작 자 를 사용 할 것 이다.
C 와 C++의 형식 변환
C 중:
(T)element T(element)
c++중:
reinterpret_cast<T*> (expression)
dynamic_cast<T*> (expression)
static_cast<T*> (expression)
const_cast<T*> (expression)
C++의 네 가지 강제 전환 형식 은 각각 특정한 목적 에 적용 된다. ・dynamic_캐 스 트 는 주로'안전 한 하향 전환(safe downcasting)'을 수행 하 는 데 사용 된다.즉,하나의 대상 이 계승 시스템 의 특정한 유형 인지 확인 해 야 한 다 는 것 이다.이것 은 낡은 스타일 의 문법 으로 집행 할 수 없 는 유일한 강제 구조 전환 이자 중대 한 운행 시 대가 가 있 을 수 있 는 유일한 강제 구조 전환 이다. ・static_cast 는 강제 스텔스 변환(예 를 들 어 non-const 대상 이 const 대상 으로 전환 되 고 int 가 double 로 전환 되 는 등)에 사 용 될 수 있 습 니 다.또한 이러한 전환 의 역방향 전환(예 를 들 어 void*지침 은 유형 지침 으로 전환 되 고 기본 지침 은 파생 지침 으로 전환)에 도 사 용 될 수 있 습 니 다.그러나 const 대상 을 non-const 대상 으로 바 꿀 수 없습니다(const 만)캐 스 트 는 할 수 있다),그것 은 C-style 의 전환 에 가장 가깝다. ・const_캐 스 트 는 일반적으로 대상 의 상수 성 을 강제 적 으로 제거 하 는 데 쓰 인 다.그것 은 유일 하 게 이 점 을 할 수 있 는 C++스타일 의 강제 전환 이다. ・reinterpret_캐 스 트 는 특별히 밑바닥 의 강제 전환 에 사용 되 어 의존(implementation-dependent)을 실현 한 결과 이다.예 를 들 어 바늘 하 나 를 정수 로 전환 하 는 것 이다.이러한 강제 전환 은 바 텀 코드 외 에 매우 드 물 것 이다.통속 적 인 해석:
dynamic_cast
보통 기본 클래스 와 파생 클래스 사이 에서 전환 할 때 사용 합 니 다.
static_cast
일반적인 전환,뭘 써 야 할 지 모 르 면 이 걸 로 하 세 요.
const_cast
주로 const 와 volatile 에 대한 전환
reinterpret_cast
아무런 관련 이 없 는 변환 을 하 는 데 사용 합 니 다.예 를 들 어 하나의 문자 포인터 가 성형 수로 바 뀌 는 것 입 니 다.
구체 적 인 분석:
1)static_cast
class A { ... };
class B { ... };
class D : public B { ... };
void f(B* pb, D* pd)
{
D* pd2 = static_cast<D*>(pb); // , pb B
B* pb2 = static_cast<B*>(pd); //
A* pa2 = static_cast<A*>(pb); // A B
...
}
으로 바 꿀 수 는 없다.2)dynamic_cast
class Base { virtual dummy() {} };
class Derived : public Base {};
Base* b1 = new Derived;
Base* b2 = new Base;
Derived* d1 = dynamic_cast<Derived *>(b1); // succeeds
Derived* d2 = dynamic_cast<Derived *>(b2); // fails: returns 'NULL'
3)const_cast
class A { ... };
void f()
{
const A *pa = new A;//const
A *pb;// const
//pb = pa; // , const const
pb = const_cast<A*>(pa); // OK
...
}
const char* p = "123";
char* c = const_cast<char*>(p);
c[0] = 1; // const , 。
4)reinterpret_cast
class A { ... };
class B { ... };
void f()
{
A* pa = new A;
void* pv = reinterpret_cast<A*>(pa);
// pv B ,
...
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
hdu 1717 소수 화 점수 2 (수학)소수 화 점수 2 레이 는 수학 시간 에 선생님 의 말씀 을 듣 고 모든 소수 가 점수 로 표시 되 는 형식 이 라 고 말 했다. 그 는 녹 기 시 작 했 고 곧 완성 되 었 다. 그러나 그 는 또 하나의 문 제 를...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.