모던 C++(C++11, C++14, C++17, C++20)

#3. [모던 C++] 사용자 정의 리터럴(C++11, C++20)

2 분 소요

(C++11~) 사용자 정의 리터럴이 추가되어 int operator ""_km(long double val);와 같이 사용자가 정의해서 사용할 수 있으며, 단위계 처리가 쉬워졌습니다. (C++20~) 사용자 정의 리터럴 인자 규칙에 char8_t이 추가되었습...

#4. [모던 C++] 개선된 네임스페이스(C++11, C++17, C++20)

1 분 소요

(C++11~) 인라인 네임스페이스가 추가되어 API 버전 구성이 편리해 졌습니다. (C++17~) 단순한 중첩 네임스페이스가 추가되어 :: 로 표현할 수 있습니다. (C++20~) 인라인 네임스페이스와 단순한 중첩 네임스페이스를 결합하여 표시할 수 있...

#6. [모던 C++] 개선된 제어문(C++11, C++17, C++20)

2 분 소요

(C++11~) 범위 기반 for()가 추가되어 컨테이너 요소의 탐색 처리가 쉬워졌습니다. (C++17~) 초기식을 포함하는 if(), switch()가 추가되어 함수 리턴값을 평가하고 소멸하는 코드가 단순해 졌습니다. (C++20~) 범위 기반 fo...

#8. [모던 C++] 개선된 형변환(C++11, C++20)

1 분 소요

(C++11~) explicit 형변환 연산자가 추가되어 명시적으로 형변환 할 수 있습니다. (C++20~) explicit(bool)이 추가되어 특정 조건일 때만 explicit로 동작하게 할 수 있습니다.

#9. [모던 C++] 개선된 예외 처리(noexcept)(C++11, C++17)

3 분 소요

[MEC++#14] 예외를 방출하지 않을 함수는 noexcept로 선언하라.(느슨한 noexcept 계약 참고) noexcept는 최적화 여지가 크다. 이동 생성자, 이동 대입 연산자, swap(), 소멸자는 noexcept로 만들어라. ...

#11. [모던 C++] 우측값과 이동 연산(C++11)

27 분 소요

[MEC++#17] 암시적으로 정의되는 특수 멤버 함수들의 자동 작성 조건을 숙지하라.(이동 연산에 따른 암시적 정의 참고) [MEC++#29] 이동 연산이 존재하지 않고, 저렴하지 않고, 적용되지 않는다고 가정하라.(암시적 이동 연산 변환 참고) ...

#12. [모던 C++] 멤버 함수 참조 지정자(C++11)

3 분 소요

(C++11~) 멤버 함수 참조 지정자가 추가되어 멤버 함수에 &, && 로 좌측값에서 호출될때와 우측값에서 호출될 때를 구분하여 함수 오버로딩을 할 수 있습니다.

#13. [모던 C++] 전달 참조와 완벽한 전달(C++11)

25 분 소요

[MEC++#23] move()와 forward()를 숙지하라.(move 원리, 상수 개체의 move(). forward() 와 완벽한 전달, forward() 원리 참고) [MEC++#24] 전달 참조와 우측값 참조를 구별하라.(전달 참조 참고) [M...

#15. [모던 C++] 개선된 공용체(C++11)

2 분 소요

(C++11~) 무제한 공용체가 추가되어 공용체 멤버에서 생성자/소멸자/가상 함수 사용 제한이 풀렸으며, 메모리 절약을 위한 코딩 자유도가 높아졌습니다.

#16. [모던 C++] 람다 표현식(C++11, C++14, C++17, C++20)

21 분 소요

[MEC++#31] 기본 람다 캡쳐 모드를 피하라.(람다 캡쳐 참고) 람다 캡쳐하는 항목을 나열하는게 직관적이다. [=]는 this를 람다 캡쳐한다. [MEC++#32] 객체를 클로저 안으로 이동시...

#17. [모던 C++] static_assert()(C++11)

최대 1 분 소요

(C++11~) static_assert()가 추가되어 컴파일 타임 진단이 가능해 졌습니다. (C++17~) static_assert()의 메시지 생략을 지원합니다.

#19. [모던 C++] 개선된 템플릿(C++11, C++14, C++17, C++20)

8 분 소요

(C++11~) extern으로 템플릿 선언을 할 수 있으며, 템플릿 인스턴스 중복 생성을 없앨 수 있습니다. (C++11~) 템플릿 오른쪽 꺽쇠 괄호 파싱을 개선하여 템플릿 인스턴스화시 >가 중첩되어 >>와 같이 되더라도 공백을 추가할 필요가...

#20. [모던 C++] 가변 템플릿과 파라메터 팩(C++11, C++17)

4 분 소요

(C++11~) 가변 템플릿과 파라메터 팩이 추가되어, 가변 인자(…)와 같이 갯수와 타입이 정해 지지 않은 템플릿 인자를 사용할 수 있습니다. (C++11~) sizeof…() 연산자가 추가되어 가변 템플릿에서 파라메터 팩의 인자수를 구할 수 있습니다. ...

#21. [모던 C++] 특성(attribute)(C++11, C++14, C++17, C++20)

5 분 소요

(C++11~) 특성(attirbute)이 추가되어 컴파일러에게 부가 정보를 전달하는 방식을 표준화 했습니다. (C++14~) [[deprecated]]가 추가되어 소멸 예정인 것을 컴파일 경고로 알려줍니다. (C++17~) [[fallthrough]]...

#23. [모던 C++] 인라인 변수(C++17)

1 분 소요

(C++17~) 인라인 변수가 추가되어 헤더 파일에 정의된 변수를 여러개의 cpp에서 #include 하더라도 중복 정의 없이 사용할 수 있습니다. 또한, 클래스 정적 멤버 변수를 선언부에서 초기화 할 수 있습니다.

#25. [모던 C++] 개선된 연산자(삼중 비교 연산자)(C++20)

10 분 소요

(C++20~) 삼중 비교 연산자가 추가되어 비교 연산자 구현이 간소화 되었습니다. (C++20~) 삼중 비교 연산자를 default로 정의할 수 있습니다. (C++20~) 비트 쉬프트 연산자의 기본 비트가 표준화되어 << 1는 곱하기 2의 ...

#26. [모던 C++] 컨셉(concept)과 요구사항(requires)(C++20)

10 분 소요

(C++20~) 컨셉(concept)과 요구사항(requires)이 추가되어 템플릿 인자나 auto에 제약 조건(constraint)을 줄 수 있습니다. (C++20~) 컨셉 설계를 활용하여 마치 인터페이스처럼 컨셉에 의한 코딩 계약을 만들 수 있습니다.

#27. [모던 C++] 모듈(module)(C++20)

8 분 소요

(C++20~) 모듈이 추가되어 전처리 사용 방식을 개선하여 컴파일 속도를 향상시키고, #include 순서에 따른 종속성 문제, 선언과 정의 분리 구성의 불편함, 기호 충돌 문제를 해결했습니다.

#29. [모던 C++] 기타(C++11, C++17, C++20)

4 분 소요

(C++11~) alignas() 와 alignof()가 추가되어 메모리 정렬 방식을 표준화 됐습니다. (C++11~) 가변 매크로가 추가되어 C언어와의 호환성이 높아졌습니다. (C++11~) 멤버의 sizeof()시 동작이 개선되어 개체를 인스턴스화 ...