C++ 12

[C++] Unscoped & Scoped Enumerations

Enum Type: 이름으로 값 구분 Enum Type의 객체는 Enum 값 중 하나만 가질 수 있다 Enum 값은 integral 타입이다. 값이 할당되지 않은 Enumerator는 자동으로 첫번째 enumerator가 0이 된다. unscoped enum의 예) enum Suit { Clubs, Diamonds, Hearts, Spades }; Suit suit = Clubs; enum Suit { Clubs = 1, Diamonds = 2, Hearts = 4, Spades = 8 }; Scoped Enumeration은 unscoped Enumeration과 비슷하지만 다음 점이 다르다: - 모든 enumerator가 자기 자신 스코프에 있어야 한다 - integral type이 값으로 사용된다 ..

C++ 2023.11.22

[C++] 참조

참조는 이미 존재하는 객체의 alias이다. 참조에는 두 종류가 있다 - lvalue 참조 - rvalue 참조 T의 lvalue 참조 : T& T의 rvalue 참조 : T&& 참조를 초기화하는 것을 reference binding이라 한다. lvalue와 rvalue 참조는 바인딩 속성에서 차이가 있다.(어떠한 종류의 객체 타입이 바인딩 될 수 있는지) 대부분의 경우에는 lvalue 참조가 사용된다 rvalue 참조는 이동 생성자, 이동 대입 연산의 경우에 사용된다. int x; int& y = x; // y: lvalue 참조 int&& tmp = 3; // tmp : rvalue 참조 int i = 42; int& j = i; assert(j == 42); 참조와 포인터의 차이: 비슷하지만 다르다..

C++ 2023.11.22

[C++] 포인터

포인터: - 다른 객체가 저장되어 있는 주소를 값으로 갖는 객체 - 객체 타입 T에 대한 포인터 타입은 T* - 포인터가 어떤 주소도 가리키지 않을 경우 널 포인터(null pointer) - nullptr - 포인터가 가리키는 객체에 접근하는 것을 dereferencing이라 함 - dereferencing은 indirection operator * 를 사용 - p : 포인터, *p : 포인터가 가리키는 객체 - x가 타입 T의 객체라면, &x는 객체의 주소이며, 타입은 *T이다 char c; char* cp = nullptr; char* cp2 = &c; int i = 42; int* p = &i; assert(*p = 42); assert 함수 - C언어 헤더파일 : - C++ 헤더파일 :

C++ 2023.11.22

[C++] 선언과 정의

선언(declaration) : identifier를 소개하는 것, (identifier에 대한 모든 정보를 제공할 필요는 없다) - 객체라면 객체의 타입과 이름만 - 함수라면, 파라미터의 개수, 각 파라미터의 타입, 리턴 타입 정도만 정의(definition) : identifier와 연관된 entity, identifier에 대한 모든 정보를 제공하는 것 - type이라면 type과 관련된 모든 상세 정보 - object라면, 공간이 allocated 되도록 해야 하고, object가 created 되도록 하는 것 - function이라면, 함수 본문 객체의 경우에는 객체의 선언이 곧 객체의 정의가 된다. 선언은 여러번 할 수 있지만, 정의는 한 번만 일어난다. 예시 int count; // decl..

C++ 2023.11.22

[C++] g++ 사용법 및 g++ 옵션들

g++이란? GNU Compiler Collection (GCC) C++ Compiler C++ 코드를 컴파일하고, 링크를 할 때 사용 기본 사용법 file.cpp를 컴파일해서 오브젝트 코드 file.o를 생성할 때: g++ -c file.cpp 오프젝트 파일 file_1.o, file_2.o, ... 를 링크하여 실행파일 executable을 생성할 때 : g++ -o executable file_1.o file_2.o ... 옵션들 -c : compile only(link는 하지 않음) -o file : output 경로를 file로 지정 -g : debugging 정보를 포함 -On : 최적화 레벨 설정, 0: 거의 없음, 3: 최대 -std=c++20 : c++20 표준을 사용 -Idir : in..

C++ 2023.11.22