본문 바로가기

반응형

c++20

(19)
[C++20] Ranges 이번 장에서는 C++20에서 추가된 range 라이브러리에 대해서 알아 보겠습니다. 처음에 새로운 라이브러리가 추가 되었다고 해서 새로운 패러다임이 가미된 엄청 복잡한 뭔가일 것이라 지레 겁을 먹고 시작했지만..사실 std::list, std::vector와 같은 자료 구조에 범위기반 알고리즘을 제공하는 편리하고 간단한 라이브러리 입니다. C++11에서 auto 키워드와 ranged for를 추가하여 길고 번거로운 iterator를 이용한 순회 코드를 간단하게 만들어 준것 처럼 C++20에서는 더 간단한 범위 기반 연산 함수들을 제공합니다. Range? C++20에서 부터 추가 되는 std 라이브러리 range는 아래와 같이 정의 되고 있습니다. 아이템들의 추상적인 집합 순회 가능해야 한다. begin(..
[C++20] 코루틴(Coroutine) - 예제 Coroutine.h #ifndef _COROUTINE_H_ #define _COROUTINE_H_ #include #include template class Coroutine { private: class Impl; struct promise_base { INITIAL_SUSPEND initial_suspend() { return INITIAL_SUSPEND{}; } std::suspend_always final_suspend() noexcept { return {}; } void unhandled_exception() { throw std::exception("unhandled exception"); } }; template struct promise_type_impl : public promise_..
[C++20] 코루틴(Coroutine) - done() [진리는어디에] - [C++20] 코루틴(Coroutine) [진리는어디에] - [C++20] 코루틴(Coroutine) - co_await [진리는어디에] - [C++20] 코루틴(Coroutine) - co_yield 이전 강의들을 톻해 C++20에서 코루틴을 생성하는 법, 코루틴을 중단하고 호출자로 돌아 오는 방법, 코루틴에서 호출자로 값을 리턴하는 방법을 알아 보았습니다. 이번 장에서는 일정한 범위의 숫자를 생성해내는 Range라는 코루틴 클래스를 만들어 보면서 코루틴의 끝을 탐지하는 방법과, Range 클래스에 iterator를 추가하여 일반 stl 컨테이너 처럼 ranged for를 이용할수 있도록 해보겠습니다 간략한 설명을 위해 예제 코드는 최대한으로 줄이고 있으나 본 포스트의 맨 아래에 전..
[C++20] 코루틴(Coroutine) - co_yield 이번 강의는 [C++20] 코루틴(Coroutine)에 이어지는 내용 입니다. 이번 강의를 읽으시기 전에 이전 포스팅을 먼저 읽어 보시길 추천 드립니다. co_yield 코루틴을 중단(suspend)하고 호출자에게 돌아갈 때, 호출자에게 값을 넘기고 싶다면 co_await대신 co_yield를 사용 하면 됩니다. Generator foo() { //co_await std::suspend_always{}; co_yield 10; } 하지만 컴파일러는 'co_yield' 구문을 만나면 내부적으로 다음과 같은 코드를 생성합니다. Generator foo() { Generator::promise_type promise; // ...코드 생략... // co_yield 10; co_await promise.yie..
[C++20] 컴파일 g++ g++ 버전 8부터 C++20의 컴파일이 가능합니다. C++20을 컴파일 하기 위해서는 커맨드라인에 아래 파라메터를 추가 합니다. g++ -std=c++20 만일 g++에서 코루틴을 사용한다면 -fcoroutines 옵션을 추가 해야 합니다. g++ -std=c++20 -fcoroutines Visual Studio 2019 비주얼 스튜디오는 16.3버전 이상 부터 C++20을 지원합니다. C++20을 활성화 시키기 위해서는 아래 두 가지 방법이 가능합니다. 1. '프로젝트 속성 > 일반 > C++ 언어 표준 > 미리보기 - 최신 C++ 초안의 기능(/std:c++latest)' 선택 2. '프로젝트 속성 > C/C++ > 명령줄'에 /std:c++latest 추가 Visual Studio에서 C..
[C++20] 코루틴(Coroutine) - co_await 안녕하세요. 저번 시간의 [진리는어디에] - [C++20] 코루틴(Coroutine)에서는 C++20에서 새로이 도입된 코루틴의 기본에 대해 알아 보았습니다. 이 포스팅은 지난 과정에 이어지는 내용이므로 저번 포스팅을 한번 살펴 보시고 오시는 것이 이번 포스팅을 이해하는데 좀 더 도움이 되리라 생각합니다. 이번 포스팅에서는 지난 시간에 이어 co_await 키워드에 대해 살펴 보는 시간을 갖도록 하겠습니다. co_await expr co_await는 단항 연산자로써, 코루틴의 실행을 중단(suspend)하고 호출자(caller)에게 제어권을 넘기는데 사용 됩니다. co_await의 피연산자(expr)는 co_await operator를 구현했거나 현제 코루틴의 Promise::await_trasnform..
[C++20] 코루틴(Coroutine) 1958년 멜빈 콘웨이에 의해 처음으로 개념이 만들어 졌으며 이미 많은 현대 프로그래밍 언어들에서 지원하고 있지만 C++에만 없던 코루틴이 C++20 부터 드디어 지원됩니다. 코루틴이 지원되는 것은 너무도 반갑고 만세를 불러야 하는 일인데, 역시 C++은 C++이었습니다. 유구한 역사와 전통을 자랑하는 '자유를 주는 대신 책임도 니가 져라'라는 C++의 정신 답게 코루틴 활용 방법에 자유를 준 대신, 편리한 사용성을 가져갔습니다. 덤으로 제대로 사용하지 못하는 경우의 책임도 사용자가 져야 합니다. 만일 C#과 파이썬, 자바스크립트와 같은 다른 언어의 코루틴 경험이 있으신 분이라면 무슨 코루틴 한번 쓰기가 이렇게 어렵냐고 생각하실지도 모르겠습니다. 하지만 이 글을 끝까지 읽어 보시면 C++코루틴도 나름 익..
[C++20] 람다 표현식의 변화 들어가며 이번 포스트에서는 C++20의 람다 표현식에 추가된 사항들을 살펴 볼 것이다. 간략하게 요약하면 아래 다섯 가지 정도로 정리 할 수 있다 : 템플릿 람다 추가 : 람다 표현식에서 템플릿 사용 가능 평가 되지 않은 표현식(unevaluated expression)에서 람다 표현식 사용 가능 캡쳐를 사용하지 않는 람다 표현식에서 디폴트 생성자와 대입 연산자 사용 가능 암시적인 this 캡쳐가 컴파일 시 경고 처리 됨(앞으로 deprecated 될 것이라고 경고) Parametaer Pack 캡쳐 가능 템플릿 람다 표현식(template lambda expression) 처음 살펴 볼 변경 사항은, C++20 부터 람다 표현식에도 템플릿의 사용이 가능해졌다는 것이다(기존 C++17까지는 람다 표현식에..
[C++20] 신규 기능 정리 새로운 문법 지원 콘셉(Concept) - 타입 오버라이딩을 넘어선 타입 속성에 따른 강력한 오버라이드 [C++20] 콘셉(Concept) 코루틴(Coroutine) [C++20] 코루틴(Coroutine) [C++20] 코루틴(Coroutine) - co_await [C++20] 코루틴(Coroutine) - co_yield [C++20] 코루틴(Coroutine) - co_return [C++20] 코루틴(Coroutine) - done() 모듈(Module) [C++20] 당신이 C++20에서 모듈을 써야만 하는 이유(#include와 모듈의 비교) [C++20] 모듈(module) 예제 상수성 지원 : constinit, consteval UTF-8 문자열 지원 : char8_t 신규 std 라이..

반응형