2023년 5월 31일 수요일

[C++ 20] Study 001 - visual C++에서 모듈 임포트 (module import), 균일 초기화 (uniform initialization), std::numeric_limits 클래스 템플릿 기초

C++20부터 추가된 모듈 기능을 이용하기. visual C++를 사용한다. 모듈 import를 사용하기 위해 다음을 수행해야한다.

1. main.cpp 파일을 만들고 속성 페이지에 들어간다. Alt + p, p
2. "C/C++ --> 언어"에서 "C++ 언어 표준"을 "ISO C++ 20 표준(/std:c++20)"으로 바꾼다.
3. "실험용 C++ 표준 라이브러리 모듈 사용"을 "예(/experimental:module)"로 바꾼다.
4. "C/C++ --> 고급"으로 들어간다.
5. "컴파일 옵션"을 "C++ 모듈 내부 파티션으로 컴파일(/internalPartition)"으로 변경한다.

import <iostream>;
// 기존에는 include <iostream>
// 세미콜론을 끝에 붙여야 한다.

어떤 모듈을 사용하고 싶다면 import 문으로 불러온다. C++ 표준 라이브러리에서 제공하는 모든 기능은 모듈로 제공된다. 직접 모듈을 정의하는 것도 가능하다.
C 표준 라이브러리 헤더는 import로 불러오지 못할 수 있음. #include <abc.h>와 같이 작성한다.

용어정리
directive: 전처리기에 전달할 사항 표현. # 문자로 시작함.

초기화 시 기존 대입 문법 대신 균일 초기화(unifrom initalization)를 사용하는 것이 바람직하다.


// 기존 대입 문법 초기화
int initialized = 1;
// 균일 초기화 사용
int initialized_by_ui { 1 };
// long long 형의 경우 LL을 붙인다.
long long longlong_var { 135LL };
// unsigned 의 경우 U를 붙인다. ULL
unsigned long long ulonglong_var { 135ULL };
// bool 타입은 true나 false로 초기화
bool bool_var { true };
// 문자열이 아닌 바이트를 다루기 위해서는 
// 헷갈리지 않게 std::byte를 사용하면 좋다.
std::byte byte_var { 20 };

숫자 경곗값과 특별한 부동소수점수를 구할 때 std::numeric_limits 클래스 템플릿을 활용할 수 있다.


cout << numeric_limits<int>::max();
cout << numeric_limits<int>::min();
cout << numeric_limits<int>::lowest();

// 특별한 부동소수점수: NaN (Not a Number) 인지 
// 혹은 무한인지 알아내기
std::isnan();
std::isinf();
std::numeric_limits<double>::infinity

외워두면 좋은 간단한 연산자 우선순위. 위에 있을수록 더 높은 우선순위임을 뜻한다.


++ -- (사후 증가/감소)
! ++ -- (사전 증가/감소)
/ * %
+ -
// 다음 순서대로 비트 연산
// 비트 연산의 우선순위가 낮음을 인지할 것
<< >>
&
^
|
= += -= *= /= %= &= |=^= <<= >>=

댓글 없음:

댓글 쓰기