본문 바로가기

반응형

진리는어디에/C++

(43)
[C++] move semantics 들어가며 이번 포스트에서는 C++11에 추가 된 내용 중 매우 중요하게 다루어지는 move에 대해 살펴 보도록 한다. 필자의 경우 move에서 말하는 자원의 '복사' 대신 '이동' 시킨다는 메커니즘이 머리 속에서 그려지지 않아 move를 접한 처음엔 이해하는데 많은 어려움을 겪었다. 하지만 본 포스트를 읽는 여러분에게는 필자와 같은 어려움을 겪지 않도록 최대한 쉽게 move에 대해 접근해 보도록하겠다. NOTICE : move에 대해 이해하기 위해서는 r-value에 대한 이해가 먼저 필요하다. 만일 r-value에 익숙하지 않은 분이라면 [r-value 레퍼런스(reference) 완벽 가이드]를 먼저 읽고 돌아 오도록 하자. Move semantics란? 이번 섹션은 move라고 불리는, Move s..
[C++] r-value 레퍼런스(reference) 완벽 가이드 들어가며 C++11 부터 & 연산자로 표기 되는 참조 타입에 추가하여 && 연산자로 표기 되는 r-value 레퍼런스라는 새로운 개념이 추가 되었다. 이번 포스트에서는 r-value 란 무엇인지, 무슨 이유로 추가되었는지, 어떤 경우에 유용하게 사용할 수 있을지에 대해 자세히 살펴 보도록 하겠다. r-value 란? r-value 라는 용어가 생소한 분들을 위해 r-value가 무엇인지 먼저 알아 보도록 하자. r-value를 한줄로 요약하면 '오른쪽(right)에만 올 수 있는 값'이라고 정의할 수 있다. 아직 뜬 구름 잡는 소리 처럼 들리겠지만 잠시만 인내심을 가지고 아래 예제를 살펴 보자. int main() { int v1 = 0, v2 = 0; v1 = 10; // ok 10 = v1; // e..
[C++] constexpr 조건문 들어가며 다른 프로그래밍 언어와 C++의 큰 차이점을 들자면 C++ 표준 위원회는 강박증이라고 생각될 정도로 컴파일 타임에 뭔가를 하는 것에 집착하는것 처럼 보인다. 오늘 포스트에서 다루어 볼 constexpr도 그 중의 하나로써, 이전 포스트 constexpr 상수, constexpr 함수 에서 constexpr을 이용해 컴파일 타임 상수와 컴파일 타임에 실행 되는 함수에 대해 살펴 본것에 이어 컴파일 타임에 조사 되는 if 문을 살펴 보고자 한다. if constexpr 일반적인 조건문은 실행 시간에 조건식을 조사하는 반면에 constexpr 조건문은 컴파일 시간에 조건식을 조사한다. 이 때 if constexpr의 조건식에 들어가는 조건문은 반드시 컴파일 타임에 값을 결정할 수 있어야만 한다. //..
[C++] constexpr 함수 들어가며 이전 포스트 'constexpr 상수'에서는 컴파일 타임 상수로써의 constexpr 키워드에 대해 살펴 보았다.이번 포스트에서는 컴파일 타임 함수로써의 constexpr 함수의 개념과 특징에 대해 살펴 보는 시간을 갖도록 하겠다. constexpr 함수의 개념 먼저 아래의 코드 샘플을 살펴 보자. constexpr 함수의 형식은 기존 C 또는 C++에서의 함수와 매우 비슷하다. 다만 앞에 constexpr 키워드를 붙여 주기만 하면 된다. // C/C++의 일반적인 함수 // // int add(int a, int b) // { // return a + b; // } // constexpr 키워드가 붙은 함수 constexpr int add(int a, int b) { return a + b;..
[C++] constexpr 상수 들어가며 이번 포스트에서는 C++11 부터 새로이 추가된 constexpr 키워드에 대해 살펴 보도록 하겠다. 먼저 constexpr에 대해 이해하기 위해서는 기존 C++의 const에 대해 먼저 이해 해야할 필요가 있다. 아래 예제를 살펴 보자. int main() { const int c1 = 10; c1 = 20; // error! } 위 예제는 간단하게 const 상수를 정의하고 값을 변경하고 있다. C++에서 const 한정자로 정의된 변수는 값을 바꿀수 없음을 의미하므로 위 코드를 컴파일 하게 되면 에러가 발생하게 된다. 그리고 C++11 부터 상수를 만드는 또 다른 키워드인 constexpr이 등장한다. constexpr c2 = 10; c2 = 20; // error! constexpr 역..
[C++] iomanipulator 완벽 가이드 들어가며 이번 포스트에서는 C++의 출력 포멧을 조절할 수 있는 iomanipulator에 대해 살펴 볼 것이다. 자세한 동작 원리는 나중에 연산자 오버로딩에서 깊게 살펴 보도록하고 이번 시간에는 iomanipulator의 개념과 사용 방법을 위주로 다룰 예정이다. std::dec 변수 값을 10진수로 출력 std::hex 변수 값을 16진수로 출력 std::setw 문자열 출력시 개수 지정 std::setfill 공백을 채울 문자 지정 std::left 문자열 왼쪽 정렬 iomanipulator란? C++에서 입력이나 출력의 형태를 지정하기 위해 사용하는 것을 iomanipulator라고 한다. 설명에 앞서 먼저 아래의 예제 코드를 살펴 보도록하자. 아래 코드는 간단하게 int 타입의 변수를 출력하고 ..
[C++] 표준 입출력 완벽 가이드 들어가며 이번 포스트는 C++ 기초 강좌로써 표준 입출력에 대해 살펴 보도록 하겠다. 이번 포스트는 어떻게? 왜? 라는 이해 보다는 그냥 이런것이 있구나라는 받아들이는 마음으로 가볍게 읽으면 된다. 표준 입출력? 표준 입출력은 우리가 C++ 프로그램을 만들고 실행 시켰을 때 새까만 콘솔창에 텍스트를 출력하거나 입력하는 것을 의미한다. C++에서 표준 입출력을 사용하기 위해서는 iostream, cout, cin. 이렇게 세 가지 대해 알아야 한다. 아래의 예제 코드를 살펴 보면서 이 세 가지 키워드에 대해 익숙해져 보도록 하겠다. C++ 표준 입출력 예제 코드 #include int main() { int age = 0; std::cout age; std::cout
[C++] CSV 포멧 메타 데이터 리더 들어가며 이번 포스트는 새로운 기술이나 개념에 대한 소개가 아니라 이전에 만들었던 [C++/C#] CSV 파일 읽기를 확장하여 csv의 데이터를 구조화된 데이터에 저장하는 아이디어에 대해 소개하고자 한다. 본 포스트는 C++에 대해 어느 정도 이해가 있음을 가정하고 프로그래밍 기본적인 내용들에 대해서는 다루지 않고 실제 서비스 과정 중에 도움이 되었던 아이디어들에 대해 집중하여 살펴 보도록 한다. 생각의 시작 게임을 만들다 보면 캐릭터 레벨 정보, 아이템 정보와 같은 수많은 메타 데이터를 메모리에 올려두고 수시로 검색해야한다. 이럴 때 DB또는 CVS엑셀과 같은 테이블로 부터 데이터를 읽어 클래스나 구조체 같은 레코드에 저장하고 키를 이용하여 검색하면 여러모로 편하다. 하지만 매번 새로운 메타 데이터가 ..
[C++20] 날짜와 시간(Date and Time utilities) 들어가며 C++은 가장 유명한 프로그래밍 언어중 하나지만 명성에 걸맞지 않게 유틸리티에 대한 지원이 인색하다. 특히 다른 언어에서 지원하는 문자열과 캘린더 관련 기능들은 항상 C++말고 다른 언어를 이용해 개발하고 싶은 마음이 들게 한다. 하지만 C++11 부터 점점 개선되기 시작하더니 C++20에는 보다 꽤 쓸만한 기능들이 여럿 추가 되었다. 본 포스트에서는 C++20에 추가된 날짜와 시간에 관련된 유틸리티 기능의 집합인 chrono 라이브러리를 살펴 보도록 하겠다. 자주 쓰이는 용어 본격적으로 chrono 라이브러리를 살펴보기에 앞서 자주 사용되지만 우리에게 익숙하지 않은 용어 몇가지를 먼저 살펴 보도록하겠다. 이미 알고 있을 수도 있겠지만 개념 정리한다고 생각하고 가볍게 읽어 보자. 에포크 타임(e..
[boost] posix_time::ptime을 이용한 DateTime 클래스 소스 코드 DateTime.h DateTime.cpp DateTime 객체 생성 DateTime 클래스 생성자 목록 DateTime(); DateTime(time_t unixTimestamp); DateTime(int year, int month, int day, int hour, int minute, int second); DateTime(const std::string& fmt); DateTime() Gamnet::Time::DateTime date_time; std::cout

반응형