본문 바로가기

[c++] 람다식 사용하기 들어가기 가장 유용하지만 가능 신경써야할게 많은 람다식이다. C++14에서는 auto로 인해 더 사용이 용이해졌다. 그러나 사용할 때 주의해야할 점이 있다. 하나씩 살펴보자. 작성자: ospace114@empal.com, http://ospace.tistory.com/ 람다식 람다식의 기본형은 다음과 같다. ["capture 절"]("인자목록") "추가사양" "예외사양" -> "반환형식" { "몸체" } capture 절: 해당 범위에서 액세스 또는 복사할 변수를 지정한다. 만약 없다면 “[]”만 사용하면 된다. 또한 기본 모드를 지정할 수 있다. “[&]”을 사용해 해당 범위의 모든 변수를 참조할 수 있고 “[=]”를 사용해 모든 변수를 복사해서 값을 사용할 수 있다. 또는 개별로 지정하거나 기본 모드.. 더보기
[c++] 보편참조와 오버로딩 들어가기 보편참조는 왼쪽 참조와 오른쪽 참조를 모두 받는 참조이다. 이런 보편참조는 보통 템플릿 함수를 사용해서 구현한다. 단순히 모든 참조만 받는 용도로만 쓰면 유용하지만, 그렇지 않는 상황이 발생한다. 보편참조를 사용할 때 문제점을 알아보고 이를 해결하는 방법을 살펴보자. 작성자: ospace114@empal.com, http://ospace.tistory.com/ 보편참조 사용자 이름을 목록에 추가하는 아주 일반적인 함수가 있다. std::multiset names; void addName(const std::string& name) { names.emplace(name); } 함수 자체는 크게 문제가 없지만 비효율성이 있다. 다음 실행 예를 보자. std::string myName("Foo"); .. 더보기
[c++] std::move와 std::forward 사용하기 들어가기 c++11에서 std::move와 std::forward는 왜 사용하는지 이해하기 힘들었다. 어쩌면 오른쪽 참조를 많이 사용하지 않아서? 혹시 보편참조가 무서워서 사용하지 않아서인가? std::move와 std::forward을 왜 사용하는지 이해하고 어떻게 사용할지 알아보자. 작성자: ospace114@empal.com, http://ospace.tistory.com/ std::move std::move의 역활은 단순하다. 오른값으로 캐스팅하는 함수이다. 아래 처럼 일반적인 왼값도 오른값으로 캐스팅할 수 있다. void f(Box&& box) {} Box box; f(std::move(box)); // 오른값 참조 호출 std::move의 동작방식을 이해하면 좀더 쉽게 이해할 수 있다. C++.. 더보기
[c++] 특수 멤버함수 사용하기: 복사 생성자/배정 연산자, 이동 생성자/배정 연산자, =default, =delete 들어가기 컴파일러가 정의되어 있지 않다면 자동 생성하는 특수 멤버함수(special member function)가 있다. 기본 생성자, 소멸자, 복사 생성자, 복사 배정 연산자, 이동 생성자, 이동 배정 연산자 들이다. 이동 생성자(move constructor)와 이동 배정 연산자(move assignment operator)는 C++11에서 추가되었다. 이들 특수 멤버 함수 자동 생성과 구현시 서로 간에 어떤 영향이 있는지 살펴볼려고 한다. 작성자: ospace114@empal.com, http://ospace.tistory.com/ Box 클래스 먼저 간단한 Box 클래스를 만들어보자. 단순 값 한개를 관리하게 최대한 단순하게 정의했다. class Box { public: int getValue(.. 더보기
[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++11 보편참조 사용하기 들어가기 보편참조는 C++에서 왼값 참조와 오른값 참조를 받을 수 있는 참조이다. 그러나 특수한 조건에서만 활성화되므로 잘 작동하는 것처럼 보여도 의도한대로 동작하지 않을 수 있다. 보편 참조는 템플릿 또는 auto을 사용하는 방법이 있다. 지금부터 보편 참조에 대해서 알아보자. 작성자: ospace114@empal.com, http://ospace.tistory.com/ 템플릿 활용 보편 참조를 사용하기 위해서는 템플릿 구조를 가져야 한다. 일반적인 형태는 아래와 같다. template void f(T&& val) { cout 더보기

반응형