C++ 16

C++ STL: std::rbegin, std::rend, std::crbegin, std::crend

std::rbegin, std::rend std::crbegin, std::crend 요약 기본 배열 타입은 자동으로 알맞은 reverse_iterator를 만들어 되돌려 줍니다. 그 외에는 인자로 받은 객체의 동일한 이름의 메서드를 호출합니다. 즉, 알맞은 메서드가 정의되어 있다면 사용자 정의 클래스도 인자로 넘겨 줄 수 있습니다. 설명 std::rbegin 은 마지막 원소 주소를, std::rend 는 처음 원소의1칸 이전 주소를 가리키는 reverse_iterator를 만들어 반환합니다. std::crbegin, std::crend 는 각각 std::rbegin, std::rend 와 동일한 곳을 가리키는 const reverse_iterator를 반환합니다. std::end 가 실제 마지막 원소보..

C++ Reference: std::integer_sequence, std::index_sequence

std::integer_sequence, std::index_sequence Can make integer sequence in compile-time, so it is often used in compile-time indexing. 컴파일 타임에 정수 시퀸스를 가진 녀석을 만들 수 있어, 컴파일 타임 인덱싱 등에 활용되는 녀석입니다. 헤더에 정의되어 있는 클래스입니다. Defined in header template class integer_sequence; template using index_sequence = integer_sequence; std::index_sequence 는 std::integer_sequence의 첫번째 템플릿 파라미터가 std::size_t 로 템플릿 특수화(templa..

C++ 레퍼런스: std::begin, std::end, std::cbegin, std::cend

C++ 레퍼런스 std::begin, std::end std::cbegin, std::cend 요약 기본 배열 타입은 자동으로 알맞은 iterator를 만들어 되돌려 줍니다. 그 외에는 인자로 받은 객체의 동일한 이름의 메서드를 호출합니다. 즉, 알맞은 메서드가 정의되어 있다면 사용자 정의 클래스도 인자로 넘겨 줄 수 있습니다. 설명 std::begin 은 처음 원소의 주소를, std::end 는 마지막 원소의 다음 주소를 가리키는 iterator를 만들어 반환합니다. std::cbegin, std::cend 는 각각 std::begin 과 std::end 의 동일한 주소를 가리키는 const_iterator를 반환합니다. std::begin 이상, std::end 미만 범위 이외의 값을 읽거나 쓰는건 ..

C++ 템플릿(Template): CRTP

항상 느끼는 것 이지만, C 나 C++ 개발자들은 정말 성능 변태가 분명합니다. 특히 템플릿을 배우기 시작하는 분들은 느끼시겠지만, 정말 성능 하나만을 위해 변태같은 짓을 하는것을 서슴치 않는 사람들이 바로 C++ 개발자들 입니다. 이번에 소개해드릴 템플릿 패턴은 CRTP 입니다. CRTP 는 동적 다형성(polymorphism), 즉 기반 클래스 포인터에 파생 클래스 객체의 포인터를 대입해 사용하는 것을 피하면서 가상(virtual) 함수의 override 를 흉내내는 템플릿 기법입니다. CRTP 는 템플릿에 의한 정적 다형성 이므로, 가상함수의 호출에 드는 오버헤드 비용을 없엘 수 있습니다. CRTP 의 약자는 Curiously Recursing Template Pattern 으로, 굳이 의역한다면 ..

C++ 템플릿(Template): 꼬리표 분배(Tag Dispatching) 기법

SFINAE 기법을 사용하면, 새로운 분기가 추가되면 기존 함수들의 템플릿 명세를 수정해야 합니다. 꼬리표 분배 방법은 템플릿 명세로 구분하는 것을, 함수의 인자로 구분하여 사용하는 방법입니다. 기존 함수들의 수정이 필요 없고, 깔끔해 지는 대신 표면에 드러난 함수와 처리하는 함수가 나눠지게 됩니다. 드러난 함수는 타입에 따라 알맞은 꼬리표를 실제 처리하는 함수에 전달해 주고, 처리하는 함수는 꼬리표에 따라 오버로딩해서 사용하는 방법입니다. 전달하는 방식은 템플릿 특수화(template specialization) 혹은 객체 넘겨 주기가 있습니다. 다만 특수화 해야 할 타입이 많고, 기능이 겹친다면 객체에 의한 꼬리표 분배 방식이 더 선호됩니다. 전자를 tag dispatching by type, 후자를..

C++ 을 위한 간략한 C 강좌 1 - 리터럴 및 기본 자료형

C++ 은 언어가 지향하는 점이 C 와 완전히 다른 언어입니다, C++ 코드를 C 스타일로 작성하게 되면 가독성도 떨어질 뿐 더러, 여러가지 버그를 맞이할 확률이 높습니다(애초에 C가 아무생각 없이 짜다가는 버그가 나기 십상..) 하지만 일단 C++ 도 가장 기초적인 문법(변수, 함수, 조건, 반복 등등..) 들은 C의 문법과 거의 동일하고, 매크로나 goto 같은 경우는 반드시 필요한 경우가 있습니다. 또, C++14 이하에서는 입출력 및 파일시스템 등에서 C 함수를 써야 하는 경우가 종종 있지요(C++ 17 이후로는 거의 대부분 표준 함수를 이용해서 사용 가능합니다) 그래서 C++을 사용하더라도 기본적인 C 지식은 가지고 있어야 합니다. 이번 강좌에서는 필수적인 C 문법들과, 이들이 C++에서 어떻게..

C 2020.07.25