cpp 06

jiwoo·2022년 12월 22일
0

cpp

목록 보기
7/9

CPP 06

생성일: 2022년 12월 11일 오전 1:01
최종 편집 일시: 2022년 12월 14일 오후 12:20

CPP MODULE 06


  • 형변환 연산

    • const_cast
      • const 값을 변환 가능하도록 함
    • static_cast
      • 컴파일 시 타입에 대한 오류를 잡아 준다는 장점이 있다.
      • 업캐스팅, 다운캐스팅을 제외한 포인터의 형 변환이 불가하다
      • C언어의 형변환과의 차이
        const int num =20;
        int *ptr = (int *)# 
        int *ptr2 = static_cast<int*>(&num); // 잘못된 캐스팅을 컴파일단에서 잡아준다.
    • interpret_cast
      • 포인터 ←→ 포인터
      • 포인터 ←→ 일반변수
      • 정수를 주소로 바꾸는 등, 강력하기 때문에 주의하여 사용해주어야 한다.
      • (void *) 로도 전달이 가능하다.
      • 주로 패킷통신할 때 자료를 포인터로 받아올 때 사용된다고 한다.
    • dynamic_cast
      • 참조형 또는 포인터를 캐스팅
        • 포인터의 경우 실패시 NULL 을 반환
        • 참조형의 경우 실패시 exception 을 던진다.
      • 파생클래스 → 기초클래스
      • 기초클래스→ 파생클래스 (이 경우 올바르지 않은 캐스팅이 일어날 수 있으며, 책임은 프로그래머에게 있다)
      • 기초클래스에는 가상함수가 있어야 한다.
        • why?
          • RTTI(Runtime Type Information)을 포함하는 클래스의 포인터나 참조형이야 하니가.
          • RTTI 를 사용하기 위해서는 클래스에 가상함수를 포함하고 있어야한다.
          • 동적 캐스트이므로
          • 가상함수 포인터 테이블 사용
    • https://dydtjr1128.github.io/cpp/2019/07/08/Cpp-static_cast.html
    • https://musket-ade.tistory.com/entry/C-C-형-변환-연산자-staticcast-constcast-dynamiccast-reinterpretcast
    • https://hwan-shell.tistory.com/219
  • 업캐스팅, 다운캐스팅

    • 업캐스팅
      • 부모 <= 자식 (부모에 자식을 할당)
    • 다운캐스팅
      • 자식 <= 부모 (자식에 부모를 할당)

ex00 Conversion of scalar types

static_cast

  • 스칼라 : 방향을 가지고 있지 않고 크기만 가지고 있는 물리량
  • nan, nanf
    • 컴퓨터 연산에서 NaN(Not A Number)은 연산 과정에서 잘못된 입력을 받았음을 나타내는 기호이다. 특히 부동소수점 연산에서 사용한다. 예를 들면 음수의 제곱근을 구하려고 하거나, 0으로 나누려고 했을 때 발생한다. 위키
  • inf, -inf
    • 양의 무한대, 음의 무한대

ex01 Serialization 직렬화

reinterpret_cast

  • uintptr_t

    • intptr_t와 uintptr_t 타입은 포인터의 주소를 저장하는데 사용된다.
    • 이 두 타입은 다른 환경으로 이식이 가능하고 안전한 포인터 선언 방법을 제공한다
    • 시스템 내부에서 사용하는 포인터와 같은 크기다.
    • 포인터를 정수 표현으로 변환할때 유용하게 사용할수 있다.
    • uintptr_t는 intptr_t 타입의 부호 없는 버전에 해당한다.
    • intptr_t 와 다르게 암묵적 캐스팅이 안되기 때문에 캐스팅을 붙여주어야 한다.
  • reinterpret_cast

    • reinterpret_cast<new_type>(expression)
    • 타입캐스트 연산자
    • 임의의 포인터 타입끼리 변환 허용
    • 정수형을 포인터로 캐스팅( 정수값이 포인터의 절대 주소로 들어가기 때문에 위험하다)
  • 직렬화

    • 구조가 있는 객체의 내용물을 바이트 배열로 저장하는 것
    • 직렬화는 객체를 파일의 형태 등으로 저장하거나, 통신하기 쉬운 포맷으로 변환하는 과정
    • 객체를 byte로 변환하는 과정을 의미하기도 함
    • uintptr_t serialize(Data* ptr);
  • 역직렬화

    • 바이트 배열로부터 내용물을 읽어와 객체에 채우는 것
    • Data* deserialize(uintptr_t raw);
  • https://velog.io/@hidaehyunlee/CPP-06-CPP-형변환-연산자

  • https://hudi.blog/serialization/

ex02 Identify real type

dynamic_cast

  • dynamic_cast
    • dynamic_cast(expression)
    • T : 객체의 포인터 또는 참조형

0개의 댓글