본문 바로가기

[c++] nullptr, using, enum class 사용하기 들어가기 이번에는 C++11에서 nullptr, using, enum class에 대해서 살펴보자. 작성자: ospace114@empal.com, http://ospace.tistory.com/ nullptr 사용 기존 NULL 또는 0 대신에 사용할 수 있는 nullptr가 있다. NULL도 내부적으로 0으로 정의되어 있는 경우가 대부분이다. 이는 0값과 혼동이 발생할 수 있기 때문에 nullptr을 사용을 권장하다. 이는 템플릿 사용할 때에 형식 연역시 유용하다. 기존 NULL은 int 형식으로 인지하면서 에러가 발생할 수 있다. template auto foo(FuncT& func, PtrT ptr) { return func(ptr); } int f(std::shared_ptr spb); foo(f.. 더보기
[c++] decltype, auto, 중괄호 초기화 사용하기 들어가기 C++11에 추가된 기능 중에 decltype과 auto가 있다. decltype은 대상의 형식이나 값 범주를 수정 없이 그대로 타입으로 생성하며, auto는 모든 종류의 데이터를 저장할 수 있는 타입이다. 하나씩 살펴보자. 작성자: ospace114@empal.com, http://ospace.tistory.com/ decltype 키워드 delctype은 객체에 선언된 원래 형식을 가감없이 그대로 나타낸다. 참조 정보까지 포함한다. #include struct Box { int value = 0; }; int main() { const int val = 0; std::cout 더보기
[c++] C++14 형식연역 들어가기 C++에서 형식연역에서 다룰려고 한다. 형식연역은 미정인 형식이 호출 시점에 형식이 입력되는 값에 의해 결정되는 작업을 말한다. 형식연역은 형식추론이라고 한다. 즉, 주변 상황에 따라 형식을 추론해서 결정한다는 의미이다. 너무 복잡할 수 있지만 생각보다 단순하다(?). 작성자: ospace114@empal.com, http://ospace.tistory.com/ 템플릿 형식연역 일반적인 템플릿 함수 선언에 대한 형식을 살펴보자. template void f(ParamType param); f(expr); T로 표현되는 ParamType은 param 인자에 대한 형식이다. 그리고 함수 f()을 호출할 때 expr로 수식이 입력된다. 입력되는 값에 따라서 T의 형식을 결정하는 작업이 형식연역이다. .. 더보기
[c++] C++11 보편참조 사용하기 들어가기 보편참조는 C++에서 왼값 참조와 오른값 참조를 받을 수 있는 참조이다. 그러나 특수한 조건에서만 활성화되므로 잘 작동하는 것처럼 보여도 의도한대로 동작하지 않을 수 있다. 보편 참조는 템플릿 또는 auto을 사용하는 방법이 있다. 지금부터 보편 참조에 대해서 알아보자. 작성자: ospace114@empal.com, http://ospace.tistory.com/ 템플릿 활용 보편 참조를 사용하기 위해서는 템플릿 구조를 가져야 한다. 일반적인 형태는 아래와 같다. template void f(T&& val) { cout 더보기
[c++] 오른값(r-value) 참조 이해하기 들어가기 C++11부터 포함된 저의 머리를 아프게 만든 오른값(r-value) 참조에 대해 살펴볼려고 한다. 실무에서 c++을 쓸 기회가 없어서 신경쓰고 있지 않다가 최근에 여유가 생겨서 한번 정리해 보았습니다. 저처럼 오른값 참조에 이해가 잘 안되는 시는 분에게 도움되었으면 하네요. 작성자: ospace114@empal.com, http://ospace.tistory.com/ 왼값(l-value)과 오른값(r-value)??? 거칠게 말하면 값을 할당하는 등호 기준으로 등호 왼쪽이 왼값이고 등호 오른쪽이 오른값이다. int n = 10; 위의 예에서 보면 n은 왼값이고 10은 오른값이다. 그래서 일반적으로 오른값이 왼값에 할당하게 된다. 그렇기 때문에 오른값을 왼값 위치에서 사용할 수 없다. 다른 말로.. 더보기
[C++0x] 람다식 들어가기 최근 C++의 표준인 C++0x 람다 함수가 추가되었다. 람다식 또는 람다함수는 기존 함수와 동일하다. (이후 람다함수) 단지 다른 부분은 익명(anonymous) 함수일 뿐이다. 익명이라는 것은 함수 명이 없다는 것이기에 기존 함수 선언과 같이 사용할 수 없을 뿐이다. 이 익명함수은 다른 언어에서도 많이 사용하고 있고 아주 유용하게 사용되고 있다. 작성: http://ospace.tistory.com/,2012.04.27 (ospace114@empal.com) 기본 기본 형은 다음과 같다. [] {};[]가 람다 삽입자(Lamda-introducer)이며, 뒤에 {}은 함수 블록과 동일하다. 삽입자라고 하는 이유는 선언에 의해서 다른 곳에서 재사용하기 위한 것이 아니라 그곳에만 삽입되어 사용되.. 더보기
STL에서 문자열 트림 (string trim)하기 STL에서 문자열 트림 (string trim)하기 Writer: http://ospace.tistory.com/ (ospace114@empal.com) 2008.08.13 아래 코드는 timebird님의 코드를 약간 수정하였다. 좀더 간편하고 축약하였다. namespace를 정해준 것은 동일 이름의 함수가 겹칠수 있기에 네임스페이스를 사용했다. 아래 경우는 기본 공배를 제거해주는 기능과 원하는 문자를 제거해주는 방법을 사용할 수 있다. #define TRIM\_SPACE " \\t\\n\\v" namespace ospace { inline std::string trim(std::string& s,const std::string& drop = TRIM_SPACE) { std::string r=s.eras.. 더보기
Metaprogramming 아래글은 내가 작성한 글은 아니다. 정보문화사의 boost로 배우는 개념, 도구, 기법에 나오는 내용 중 일부 pdf 문서이다. Metaprogramming 1. 도입 이번 장은 이 책 나머지 부분을 위한 몸 풀기에 해당하는 것으로, 기본적인 개념들과 용어들을 간략하게나마 개괄한다. 이 책이 다루는 내용에 대한 독자의 사전 지식을 미리 시험해볼 기회도 가질 수 있을 것이다. 이번 장을 다 읽고 나면 이 책이 무엇에 대한 책인지 어느정도 감을 잡을 수 있을 것이며, (바라건대)나머지 장들의 좀 더 큰 개념들로 나아가고자하는 열망도 생기게 될 것이다. 1.1 시작하며 템플릿 메타프로그램(metaprogram)의 멋진 점 하나는, 전통적인 시스템에서 볼 수 있는 한가지 바람직한 특성을 가지고 있다는 것이다. .. 더보기

반응형