2023년 6월 1일 목요일

[C++ 20] Study 002 - enum 대신 enum class 사용, 모듈 만들어서 export, import 하기. 초기자(initializer)

enum 대신 enum class를 사용하라. enum class는 strongly typed enumeration type으로서 값이 정수로 변환되지 않고, 열거 타입 값의 scope가 자동으로 확장되지 않아 상위 스코프의 이름과 같은 이름을 사용하더라도 충돌이 생기지 않는다.


enum class PieceType {King, Queen, Rook};

PieceType piece { PieceType::King };

다음으로 모듈을 만들어보자. 모듈을 만들기 위해 모듈 파일을 만든다. 확장자는 cpp나 ixx로 하면 된다 (둘의 차이는 아직 모르겠음. MSVC 기준). 솔루션 탐색기에서 모듈 파일 우클릭 --> 속성 클릭 --> C/C++ --> 고급 --> 컴파일 옵션을 C++모듈 코드로 컴파일(/interface)로 변경한다.

모듈 파일의 내용은 다음과 같다.

// newModule.ixx
export module newModule;
메인 파일에서 해당 모듈을 import 한다. 메인 파일의 속성에서 컴파일 옵션은 C++ 모듈 내부 파티션으로 컴파일(/internalPartition) 이다.

// main.cpp
import newModule;

C++ 17에서는 초기자(initializer)가 소개되었다. if statement 안에서만 쓰이는 변수를 만들 수 있다 (붙어있는 else if 와 else 문에서도 쓸 수 있다.). 다음과 같이 사용한다.


if (int i{ 1 }; i > 0) cout << "larger than one" << endl;

댓글 없음:

댓글 쓰기