본문 바로가기
42Seoul/cpp_module

CPP Module 06

by 하고싶은건많은놈 2023. 2. 22.

Exercise 00 : Conversion of scalar types

static_cast<>를 사용한 형변환이 주가 되는 과제

main 함수의 매개변수로 받은 C 스트링을 string으로 우선 만들어놓은 후, 해당 스트링을 double형으로 변환하여 사용

  • 변환에는 strtod() 함수를 이용
  • strtod() 함수의 두번째 인자로 받는 char형 포인터에는 double 형으로 변환이 불가능한 문자의 위치가 저장됨
  • 즉, 변환이 정상적으로 이루어졌을 경우에는 문자열 끝의 \0 위치를 반환

infinfinity를 뜻하고, nanNot a number의 약자로 숫자가 아님을 뜻함
문제에서 inf의 경우 +,-를 구분하라고 하였으므로 std::showpos를 사용해 부호를 표시
std::numeric_limits<>::digits10은 정밀도의 손실 없이 해당 형식이 나타낼 수 있는 10진수 자릿수를 뜻함


Exercise 01 : Serialization

포인터를 변환하는 경우에는 일반적인 형 변환인 static_cast<>를 사용할 수 없음
따라서 reinterpret_cast<>를 사용하여 Datauintptr_t형 사이의 변환을 강제로 실행


과제 이름인 Serialization(직렬화)란 메모리를 디스크에 저장하거나 네트워크 통신에 사용하기 위한 형식으로 변환하는 것을 뜻함

  • 데이터를 저장할 경우 추후 메모리가 해제될 수 있고, 통신하는 경우에는 수신하는 기기가 다른 메모리를 가지고 있기 때문에 메모리의 주소인 포인터값은 아무런 의미를 가지지 못함
  • 따라서 포인터값이 아닌 해당 포인터가 가리키는 값을 그대로 사용하여야 하며, 이 때 특정 포인터를 가지고 값 형식으로 변환해주는 것이 직렬화임

Exercise 02 : Identify real type

RTTI(Runtime Type Information)dynamic_cast<>를 사용하는 과제
관련 지식을 미리 정리해두었던 내용

'42Seoul > cpp_module' 카테고리의 다른 글

CPP Module 07/08  (0) 2023.02.22
CPP Module 05  (0) 2023.02.22
CPP Module 04  (0) 2023.02.22
CPP Module 03  (0) 2023.02.22
CPP Module 02  (0) 2023.02.22

댓글