반응형
❗이 글은 ChatGPT와의 질답을 통해 작성되었습니다.
C++ 20은 여러 가지 새로운 기능을 추가하였습니다. 그 중에서는 다음과 같은 기능들이 있습니다:
- Concepts: 템플릿 인수의 유효성을 컴파일 타임에 검사할 수 있는 기능.
- Concepts는 템플릿 함수나 템플릿 클래스의 인수들이 원하는 조건(concept)을 만족하는지 컴파일 타임에 검사할 수 있는 기능입니다. 이를 통해서 템플릿 함수나 클래스를 사용할 때 오류를 최대한 빨리 확인 할 수 있게 됩니다.
- 예를 들어, 아래의 함수 add()는 두 개의 값을 더하는 함수 입니다.
template<typename T, typename U> auto add(T a, U b) { return a + b; }
- 이 함수를 사용할 때 T, U 타입은 어떤 타입이든 가능하지만, 타입 T는 덧셈 연산이 가능해야 합니다.
이를 Concepts를 사용하여 표현 할 수 있습니다. - Concepts를 사용하면 템플릿을 사용할 때 인수가 요구하는 조건을 만족하는지를 컴파일 타임에 검사할 수 있어서, 프로그래밍 시 오류를 최대한 빨리 잡을 수 있게 됩니다.
template<typename T, typename U> requires std::is_addable<T, U>::value auto add(T a, U b) { return a + b; }
- Coroutines: 코루틴(coroutine)을 지원하는 기능, 비동기 프로그래밍을 쉽게 할 수 있다.
- Coroutines은 함수를 코루틴(coroutine)으로 작성할 수 있는 기능입니다. 코루틴은 일반 함수와 달리 다른 함수로 제어권을 넘길 수 있어 비동기 프로그래밍을 편리하게 할 수 있습니다.
- 예를 들어, 아래의 코드는 제너레이터 함수를 코루틴으로 작성한 예제 입니다.
generator<int> fibonacci() { int a = 0, b = 1; while (true) { co_yield a; int tmp = a; a = b; b += tmp; } }
- 이 함수를 실행할 때, fibonacci() 함수는 처음에는 0을 반환하고, 그 다음에는 1을 반환 합니다. 그리고 이를 계속 반복하면서 피보나치 수열을 반환합니다.
- Coroutines 기능을 사용하면, 일반적인 코드를 사용하는 것보다 더 간단하고 편리하게 비동기 코드를 작성할 수 있게 됩니다.
- Modules: 모듈을 지원하는 기능, 코드를 보다 구조적으로 관리할 수 있다.
- Modules는 모듈 시스템을 지원하는 기능입니다. 이 기능을 사용하면, 코드를 여러 파일로 분리하여 관리할 수 있고, 의존성 관리를 간편하게 할 수 있습니다.
- 예를 들어, 아래의 코드는 math.cpp에 정의된 sqrt() 함수를 main.cpp에서 사용하는 예제입니다.
//math.cpp export double sqrt(double value) { return std::sqrt(value); }
//main.cpp import math; int main() { double value = sqrt(4); std::cout << value << std::endl; return 0; }
- Modules 기능을 사용하면, 코드를 모듈 단위로 관리할 수 있고, 프로젝트가 커지면서 코드가 꼬이는 문제를 해결할 수 있습니다.
- Ranges: 범위(range)를 지원하는 기능, 컬렉션을 더욱 쉽게 순회할 수 있다.
- Ranges는 범위(range)를 지원하는 기능입니다. 이 기능을 사용하면, 컬렉션(collection)을 더욱 쉽게 순회할 수 있고, 코드를 더욱 간단하게 작성할 수 있습니다.
- 예를 들어, 아래의 코드는 배열을 순회하는 예제입니다.
std::array<int, 4> arr = {1, 2, 3, 4}; for (int i : arr) { std::cout << i << std::endl; }
- Ranges 기능을 사용하면, 컬렉션을 순회하는 코드를 더욱 간단하게 작성할 수 있습니다. 예를 들어, 아래와 같이 순회 중 특정 조건에 만족하는 값만 걸러내는 코드를 작성할 수 있습니다.
std::vector<int> arr = {1, 2, 3, 4, 5}; for (int i : ranges::filter(arr, [](int x){return x % 2 == 0;})) { std::cout << i << std::endl; }
- Ranges 기능은 STL(Standard Template Library)를 확장하여, 컬렉션을 순회하는 기능과 조작하는 기능을 간단하게 작성할 수 있도록 해줍니다.
C++ 20은 현재 아직 정식 릴리즈되지 않았습니다. 정식 릴리즈되면 이러한 기능들을 사용할 수 있습니다.
728x90
반응형
'개발 > C++' 카테고리의 다른 글
1. VS 2019에서 C++ 프로젝트를 DLL로 빌드하기 (0) | 2023.01.31 |
---|---|
C++ 람다 함수 정리 (1) | 2023.01.25 |
Boost Geometry 자주 사용하는 함수 정리 1편 (0) | 2022.11.02 |
std::unordered_map 정렬하기 (0) | 2022.10.06 |
[Boost Geometry] points -> polygon cluster (0) | 2022.08.10 |