C++프로그래밍/C 와 C++ 기초실습

연산자와 c++캐스팅연산자

season97 2023. 10. 9. 15:56

▶ 연산자

 

ㆍ 프로그램이 동작할 때 정해져 있는 특정한 연산을 수행하는데 사용되는 기호나 키워드

 

▶ 연산자의 종류

 

ㆍ 산술 연산자 ( + , - , * , / , %)

 

ㆍ 비교 연산자 (==, != , < , > , <= , >= )

 

ㆍ 할당 연산자 (=, += , -= , *= , /= , &=)

 

ㆍ 비트 연산자 (<< , >> , ~, | , & , ^)

 

ㆍ 논리 연산자(&& , || , !)

 

ㆍ 형변환 연산자 (특정 자료형)   

└ c 스타일의 명시적 형변환은 강제 형변환이기 때문에 버그가 생길 여지가 있다.

└ 그래서 안정성을 우선시 한다면 c++타입의 캐스팅 연산자를 사용해야 한다. 

c 스타일의 강제 형변환

※ 이 외에도 단항연산자, 이항연산자, 전위/후위 증감연산, 삼항연산 등등 많은 연산자들이 있다.

 

▶ C++의 캐스팅연산자

 

1. static_cast

static_cast 예시

ㆍ 가장 일반적인 형변환 연산자로 컴파일 시점에 형변환이 가능한지 확인한다.

 

ㆍ 위 예시에서 i는 3이된다.

 

2. dynamic_cast

dynamic_cast 예시

ㆍ 주로 클래스의 포인터나 참조형을 상속 계층 내에서 안전하게 형변환 하는데 사용된다.

 

ㆍ 이 연산자는 실행시점에 해당 변환이 가능한지 확인하므로 조금 더 안전하지만 성능이 저하될 수 있다.

 

ㆍ위 코드에서 base변수에 실제 메모리에 할당된 객체는 Derived 타입이지만 이 객체를 가리키는 포인터는 부모클래스인 Base타입이라는 점.

 

ㆍ if 문 내에서 'dynamic_cast' 를 사용해 'base' 포인터가 실제로 가리키고 있는 객체가 'Derived' 타입임을 확인해준다.

 

ㆍ 만약 'base'가 가리키고있는 객체가 'Derived'타입이라면 안전하게 해당 객체의 맴버변수 'a'값에 접근해서 값을 변경할 수 있다.

 

3. const_cast

const_cast 예시

ㆍ 객체의 상수성을 추가하거나 제거하는데 사용된다

 

ㆍ 위 코드에서 const_cast를 이용해 ci의 상수성을 제거했지만, 실제로 원래 값이 상수였기 때문에

그 값을 변경하는 것은 정의되지 않은 동작을 초래할 수 있다.

 

4. reinterpret_cast

 

reinterpret_cast 예시

ㆍ 서로 관련 없는 타입들 사이에 변환을 수행한다.

 

 

 

 

'C++프로그래밍 > C 와 C++ 기초실습' 카테고리의 다른 글

상수  (1) 2023.10.09
함수  (1) 2023.10.09
조건문  (1) 2023.10.09
반복문과 출력  (1) 2023.10.09
자료형과 변수, 네임스페이스  (1) 2023.10.09