본문 바로가기

반응형

C++

(30)
[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++] type traits 기초 들어가며 type traits는 C++ 템플릿 메타 프로그래밍에서 꽤나 유용하게 쓰이는 기술중에 하나다. 여러분은 type traits를 이용하여 '타입'의 다양한 속성들에 대해 조사하거나, 타입의 프로퍼티를 변경할 수 있다. 예를 들어 제네릭타입 T가 있다고 가정하자. T는 int도 될 수 있고, bool, std::vector 또는 다른 어떠한 타입도 가능하다. template class Widget { // ... }; 여러분은 type traits를 이용하여 제네릭 템플릿 인자로 넘어온 타입 T가 int형인지, 함수인지, 포인터인지 아니면 클래스인지, 클래스라면 소멸자를 가졌는지, 복사가 가능한지, 예외를 던지는지 아닌지 등등 다양한 것들을 조사 할 수 있다. 이런 타입에 대한 정보들은 조건부 컴..
[C++20] 당신이 모듈(module)을 써야만 하는 이유 들어가며 C++의 모듈(module)은 concepts, ranges, coroutine과 더불어 'Big Four'이라고 불려지며 C++20 스펙에 추가된 네 가지 주요 요소 중에 하나다. 모듈은 기존 헤더 파일을 대체할 수 있을 뿐만 아니라, 컴파일 시간 개선, 매크로 격리(macro isolation, 용어가 생소하지만 뒤에 설명이 나온다)등을 제공한다. 간단하게 정리하면 #include 전처리 방식을 대신할 수 있는 새로 도입된 개념으로써 java의 package나 C#의 namespace와 동일한 역할을 한다. 모듈의 도입으로 C++에 어떠한 변화가 생겼는지 알아 보기 위해 우리는 기존 C++은 어떤 모습이었는지 먼저 살펴 볼 필요가 있다. 기존 C++의 구조를 보기 위해 그 유명한 "Hello..

반응형