이 개방형 과정은 이미 C 및 객체 지향 프로그래밍에 익숙한 사람들을 대상으로 하며 C++ 프로그래밍 숙련도 수준을 목표로 합니다. 이 과정에서는 C++ 프로그래밍의 기본 사항을 다루고 고급 C++ 의미론 및 개념으로 넘어갑니다.
주요 특징 :
강좌가 마음에 들었거나 유용하다고 생각되면 별표를 추가해 주세요.
# | 제목 | 주요 초점 |
---|---|---|
1 | 소개 (html) | C/C++의 역사, 응용분야, 강좌소개 |
2 | 준비 (html) | 책, 컴파일 방법, Hello world |
3 | 기본 개념 I (html) | 유형 시스템, 기본 유형 및 연산자 |
4 | 기본 개념 II (html) | 정수 및 부동 소수점 유형과 해당 산술 |
5 | 기본 개념 III (html) | 엔터티, 열거자, 구조, 제어 흐름 문 |
6 | 기본 개념 IV (html) | 힙, 스택, 포인터, 참조, Const 속성, 변환 연산자 |
7 | 기본 개념 V (html) | 함수, 람다 표현식, 전처리 지시문 |
8 | 객체지향 프로그래밍 I (html) | 클래스 계층 구조, 생성자, 소멸자, 클래스 키워드 |
9 | 객체 지향 프로그래밍 II (html) | 다형성, 연산자 오버로딩 |
10 | 템플릿과 메타 프로그래밍 I (html) | 함수 템플릿, 유형 특성, 컴파일 타임 유틸리티 |
11 | 템플릿과 메타 프로그래밍 II (html) | 클래스 템플릿, SFINAE |
12 | 번역 단위 I (html) | 연결 및 단일 정의 규칙 |
13 | 번역 단위 II (html) | 여러 번역 단위 및 파일 처리, #include , 모듈 |
14 | 코드 규칙 I (html) | 프로젝트 구성, 코드 규칙 소개, 엔터티 규칙 |
15 | 코드 규칙 II (html) | 템플릿, 네임스페이스, 최신 C++, 유지 관리 용이성, 명명 및 형식 지정 규칙 |
16 | 디버깅 및 테스트 (html) | 실행/메모리 디버깅, 새니타이저, 하딩 기술, 단위 테스트, 테스트 기반 개발 |
17 | 생태계 (html) | Cmake, 문서화 및 기타 도구 |
18 | 유틸리티 (html) | 주요 std 라이브러리 |
19 | 컨테이너, 반복자 및 알고리즘 (html) | 컨테이너, 반복자, 알고리즘, 범위 |
20 | 고급 주제 I (html) | 이동 의미론, 보편적 참조, 유형 추론 |
21 | 고급 주제 II (html) | 오류 처리, C++ 관용구, 스마트 포인터 |
22 | 성능 최적화 I (html) | 암달 법칙, 성능 한계, 아키텍처 개념(ILP, SIMD 등), 메모리 계층 |
23 | 성능 최적화 II (html) | 산술 최적화, 메모리 최적화 등 |
24 | 성능 최적화 III (html) | 컴파일러 최적화, 프로파일링, 벤치마킹 도구 |
25 | 소프트웨어설계Ⅰ (html) | 기본 개념, 원리, 사용 사례 |
26 | 소프트웨어 설계 II (html) | 디자인 패턴과 관용어 |
올인원 책 : modern-cpp.pdf (몇 가지 커밋이 뒤쳐질 수 있음), html
1. 소개
2. 준비
3. 기본 개념 I - 유형 시스템, 기본 유형 및 연산자
void
유형, nullptr
auto
키워드<=>
, 안전 비교 연산자4. 기본 개념 II - 적분 및 부동 소수점 유형
size_t
, ptrdiff_t
, uintptr_t
, 산술 연산 의미, 승격, 잘림, 정의되지 않은 동작, 포화 산술NaN
), 기계 엡실론, 마지막 위치의 단위(ULP), 치트시트, 한계 및 유용한 함수, 산술 속성, 특수값 동작, 정의되지 않은 동작, 부동 소수점 오류 감지5. 기본 개념 III - 엔터티 및 제어 흐름
struct
, 비트필드, union
if
문, for
및 while
루프, 범위 기반 for
루프, switch
, goto
, 사용되지 않는 변수 경고 방지using
, using namespace
, inline
네임스페이스[[nodiscard]]
, [[maybe_unused]]
, [[deprecated]]
, [[noreturn]]
6. 기본 개념 IV - 메모리 개념
&
, struct
멤버 액세스, void
포인터, 포인터 변환, 포인터 산술, 와일드 및 댕글링 포인터new
, delete
, 비할당 배치 할당, Non-throwing 할당, 메모리 누수Const
및 상수 표현식 : 상수 및 리터럴, const
, constexpr
, consteval
, constinit
, if constexpr
, std::is constant evaluated()
, if consteval
volatile
키워드static_cast
, const_cast
, reinterpret_cast
, 유형 punning, std::bit_cast
, 균일한 초기화 변환, gls::narrow_cast
sizeof
연산자 : 개요, [[no_unique_address]]
7. 기본 개념 V - 함수 및 전처리
=delete
, 기본 매개변수constexpr/consteval
, template
, mutable
, [[nodiscard]]
, 캡처 목록 및 클래스#
), #error
및 #warning
, #pragma
, 토큰 붙여넣기 연산자 ##
, Variadic 매크로8. 객체지향 프로그래밍 I - 클래스 개념
public/protected/private
사용하는 경우는 언제입니까?explicit
키워드, [[nodiscard]]
및 클래스= default
)this
, static
, const
, mutable
, using
, friend
, delete
9. 객체지향 프로그래밍 II - 다형성과 연산자 오버로딩
virtual
메서드, 가상 테이블, override
키워드, final
키워드, 공통 오류, 순수 가상 메서드, 추상 클래스 및 인터페이스<
, 우주선 연산자 <=>
, 첨자 연산자 []
, 다차원 첨자 연산자 []
, 함수 호출 연산자 ()
, 정적 연산자 []
및 연산자 ()
, 변환 연산자 T()
, 반환 유형 오버로딩 분해능, 증가 및 감소 연산자 ++
/ --
, 할당 연산자 =
, 스트림 연산자 <<
, 연산자 참고 사항10. 템플릿과 메타 프로그래밍 I - 함수 템플릿과 컴파일 타임 유틸리티
auto
자리 표시자, 클래스 템플릿 매개변수 유형, 배열 및 포인터 유형, 함수 유형static_assert
, 키워드 using
, decltype
키워드11. 템플릿과 메타 프로그래밍 II - 클래스 템플릿과 SFINAE
typename
및 template
키워드, 클래스 템플릿 계층 구조 및 using
, friend
키워드, 템플릿 템플릿 인수concept
키워드, requires
절, 표현식 requires
, 표현식 + 절 requires
, 절 + 표현식 requires
, requires
및 constexpr
, 중첩 requires
12. 번역 단위 I - 연결 및 단일 정의 규칙
static
키워드, 익명 네임스페이스, extern
키워드const
와 constexpr
의 연결 : 정적 초기화 순서 실패inline
함수/변수, constexpr
및 inline
extern
키워드extern
키워드13. 번역 단위 II - 포함, 모듈 및 네임스페이스
#include
문제 : 가드 포함, 전달 선언, 순환 종속성, 일반적인 연결 오류14. 코드 규칙 I
#include
: #include
가드, #include
구문, #include
순서, 일반적인 헤더/소스 파일 이름 규칙static
전역 변수, 변환struct
대 class
, 초기화, 중괄호 초기화 목록, 특수 멤버 함수, =default
, =delete
, 기타 문제, 상속, 스타일15. 규정 협약 II
auto
if/else
, 비교, switch
, for/while
using namespace
, 익명/이름 없는 네임스페이스, 네임스페이스 및 클래스 디자인, 스타일16. 디버깅 및 테스트
std::breakpoint
valgrind
clang-tidy
17. 생태계 - Cmake 및 기타 도구
cmake
및 ctest
doxygen
clang-format
, Compiler Explorer
, 코드 변환 - CppInsights
, AI 기반 코드 완성 - 로컬 코드 검색 - ugrep
, ripgrep
, hypergrep
, 코드 검색 엔진 - searchcode/grep.app
, 코드 벤치마킹 - Quick-Bench
, 코딩용 폰트18. 유틸리티
ofstream/ifstream
std::string
, 숫자 값 변환, std::string_view
, std::format
, std::print
std::span
<random>
, Seed, PRNG 기간 및 품질, 분포, 최신 알고리즘 및 성능, 준난수std::pair
, std::tuple
, std::variant
, std::optional
, std::any
, std::stacktrace
19장. 컨테이너, 반복자, 알고리즘
std::array
, std::vector
, std::deque
, std::list
, std::forward_list
std::set
, std::map
, std::multiset
std::stack
, std::queue
, std::priority_queue
std::advance
, std::next
, std::prev
, std::distance
, 컨테이너 액세스 메서드, 반복자 특성std::find_if
, std::sort
, std::accumulate
, std::generate
, std::remove_if
20. 고급 주제 I
lvalues
및 rvalues
참조, 이동 의미 체계, std::move
, 클래스 선언 의미 체계&
, &&
참조 한정자와 volatile
오버로딩auto
추론, auto(x)
: 붕괴 복사const
정확성21. 고급 주제 II
noexcept
키워드, 메모리 할당 문제, 반환 코드 및 예외 요약, std::expected
, 대체 오류 처리 접근 방식std::unique_ptr
, std::shared_ptr
, std::weak_ptr
22. 최적화 I - 기본 개념
23. 최적화 II - 코드 최적화
printf
, 메모리 매핑된 I/O, 원시 데이터 로딩 속도 향상[[likely]]
/ [[unlikely]]
, 부호 있는/부호 없는 정수, 루프, 루프 호이스팅, 루프 풀기, 어설션, 컴파일러 힌트 [[assume]]/std::unreacheable()
, 재귀24. 최적화 III - 비코딩 최적화 및 벤치마킹
gprof
, uftrace
, callgrind
, cachegrind
, perf
Linux 프로파일러25. 소프트웨어 설계 I - 기본 개념(초안)
26. 소프트웨어 디자인 II - 디자인 패턴 및 관용구(초안)
오타, 개념적 오류, 개선할 부분 등을 발견하시면 issue
패널을 통해 제보해 주세요.
Federico Busato
, https://federico-busato.github.io/