The following noteworthy changes have been made:
2023 Jun 5Revision
2.4 -- Introduction to function parameters and argumentsAdded section: Function parameters not used in the function body
2023 May 30New
7.4 -- Constexpr if statementsAdded lesson: Constexpr if statements
2023 May 29Revision
5.1 -- Operator precedence and associativityRewrote lesson to clarify concepts and tighten terminology
2023 May 11Revision
11.3 -- Arrays and loopsAdded quiz 4. Thanks to reader Waldo!
2023 May 11Revision
7.10 -- For statementsAdded quizzes 4 and 5. Thanks to reader Waldo!
2023 May 9Revision
0.11 -- Configuring your compiler: Warning and error levelsRecommending -Wconversion for GCC/Clang/VS Code users
2023 May 9Revision
7.16 -- Detecting and handling errorsAdded section: When to use `std::cout` vs `std::cerr` vs logging
2023 May 5Revision
0.11 -- Configuring your compiler: Warning and error levelsAdded information on how to enable signed/unsigned conversion warnings for Visual Studio
2023 May 5Split
8.4 -- Narrowing conversions, list initialization, and constexpr initializersRefactored narrowing conversion content from prior lesson. Added content around constexpr initializers.
2023 May 5Revision
8.3 -- Numeric conversionsAdded section: Safe and unsafe conversions
2023 May 4Revision
8.17 -- Non-type template parametersAdded sections: Implicit conversions for non-type template arguments, and Type deduction for non-type template parameters using `auto`
2023 Apr 22Revision
1.6 -- Uninitialized variables and undefined behaviorAdded section: Implementation-defined behavior and unspecified behavior
2023 Apr 21Split
8.17 -- Non-type template parametersRefactored content and added examples (in preparation for future content)
2023 Apr 13Revision
5.3 -- Remainder and ExponentiationRenamed modulus to remainder, added rationale
2023 Mar 30New
14.y -- Chapter 14 projectAdded project: Chapter 14 project
2023 Mar 16Revision
16.7 -- std::initializer_listRevised section: List initialization prefers list constructors over non-list constructors
2023 Feb 27Revision
7.20 -- Generating random numbers using Mersenne TwisterRevised section: Random numbers across multiple functions or files (Random.h)
2023 Feb 12Revision
10.11 -- Class template argument deduction (CTAD) and deduction guidesAdded section: Type template parameters with default values
2023 Feb 8Revision
11.7 -- std::string_view (part 2)Revised section: Prefer to pass by std::string_view (over const std::string&)
2023 Feb 6Revision
9.6 -- Introduction to pointersClarified when invalid pointers produce undefined/implementation-defined behavior
2023 Jan 26Revision
20.9 -- Exception specifications and noexceptAdded section: Illustrating the behavior of noexcept functions and exceptions
2023 Jan 13Revision
1.5 -- Introduction to iostream: cout, cin, and endlAdded section: std::cout is buffered, along with additional discussion of flushing
2023 Jan 7Revision
0.6 -- Installing an Integrated Development Environment (IDE)Added instructions to update MinGW for Code::Blocks C++20 support
2023 Jan 7Revision
1.9 -- Introduction to literals and operatorsAdded discussion of operator return values and side effects
2022 Dec 21Revision
0.12 -- Configuring your compiler: Choosing a language standardAdded program to test C++20 support
2022 Dec 17Revision
14.11 -- Overloading typecastsAdded section: Converting constructors vs overloaded typecasts
2022 Dec 8Revision
SiteAdded VS Code sections
2022 Nov 29Revision
1.4 -- Variable assignment and initializationAdded section: Unused initialized variables and [[maybe_unused]]
2022 Nov 23Revision
M.8 -- Circular dependency issues with std::shared_ptr, and std::weak_ptrRewrote section: Avoiding dangling pointers with std::weak_ptr
2022 Nov 21Revision
7.20 -- Generating random numbers using Mersenne TwisterAdded section: Warming up a PRNG
2022 Nov 5Revision
10.5 -- Introduction to structs, members, and member selectionAdded a definition of the term "member"
2022 Oct 6Revision
20.4 -- Uncaught exceptions and catch-all handlersNoted that stack unwinding is optional for uncaught exceptions. Added best practice around catch-all handlers in main.
2022 Oct 6Revision
20.3 -- Exceptions, functions, and stack unwindingRevised lesson to more accurately describe when stack unwinding happens
2022 Oct 3Revision
M.4 -- std::moveAdded section: Moved from objects will be in a valid, but possibly indeterminate state
2022 Oct 3Revision
M.3 -- Move constructors and move assignmentAdded section: Do not implement move semantics using std::swap
2022 Sep 16Revision
14.10 -- Overloading the parenthesis operatorAdded extra credit quiz questions 2 and 3
2022 Sep 15Revision
7.10 -- For statementsAdded section: The perils of `operator!=` in for-loop conditions
2022 Sep 13Revision
8.7 -- Typedefs and type aliasesAdded section on naming type aliases, made type alias names consistent with best practice
2022 Sep 12Revision
4.12 -- Introduction to type conversion and static_castAdded section: Type conversion produces a new value
2022 Sep 11Revision
4.14 -- Compile-time constants, constant expressions, and constexprRevised examples, added section: Constant folding for constant subexpressions
2022 Sep 8Revision
1.10 -- Introduction to expressionsRefactored some content and linked some related lessons
2022 Sep 8Revision
1.9 -- Introduction to literals and operatorsAdded text about nullary operators
2022 Aug 25Revision
13.6 -- Constructor member initializer listsAdded section: Initializing const member variables
2022 Aug 23Revision
18.3 -- The override and final specifiers, and covariant return typesAdded covariant return types quiz
2022 Aug 23Revision
10.1 -- Introduction to program-defined (user-defined) typesRevised section: Nomenclature: user-defined types vs program-defined types
2022 Aug 20Revision
20.9 -- Exception specifications and noexceptRevised section: When to use noexcept
2022 Aug 12Revision
5.6 -- Relational operators and floating point comparisonsRevised section: Floating point equality
2022 Jul 23Revision
M.8 -- Circular dependency issues with std::shared_ptr, and std::weak_ptrAdded section: Dangling pointers with std::weak_ptr
2022 Jul 21Revision
17.9 -- Multiple inheritanceAdded section: Mixins
2022 Jun 16Split
11.7 -- std::string_view (part 2)Moved some content into chapter 4
2022 Jun 16Moved
4.18 -- Introduction to std::string_viewMoved up from chapter 11
2022 Jun 16Revision
4.17 -- Introduction to std::stringRevised content
2022 Jun 16Split
4.16 -- Numeral systems (decimal, binary, hexadecimal, and octal)Refactored from literals lesson. Made lesson optional
2022 Jun 16Revision
4.15 -- LiteralsRevised content for clarity. Moved content on numeric systems and string literals to other lessons
2022 Jun 16Split
4.14 -- Compile-time constants, constant expressions, and constexprExpanded constexpr content. Added section around constant expressions
2022 Jun 16Revision
4.13 -- Const variables and symbolic constantsRevised content for clarity. Moved constexpr content to new lesson
2022 May 13Revision
4.13 -- Const variables and symbolic constantsAdded section on constexpr strings
2022 Apr 26Revision
7.17 -- std::cin and handling invalid inputChanged occurrences of `std::cin.fail()` to `!std::cin`.
2022 Apr 24New
10.11 -- Class template argument deduction (CTAD) and deduction guidesMoved CTAD from lesson 10.10 and added deduction guides section
2022 Apr 21Revision
10.x -- Chapter 10 summary and quizAdded quiz question 3
2022 Apr 21New
10.10 -- Class templatesAdded lesson
2022 Apr 15New
2.3 -- Void functions (non-value returning functions)Moved some content from lesson 2.2. Added more discussion about return statements
2022 Apr 15Split
2.2 -- Function return values (value-returning functions)Moved some content of this lesson into lesson 2.3
2022 Apr 8Moved
SiteSplit chapter 9 (into 9 and 10). Previous chapters 10, 11, 12, 13 moved back.
2022 Mar 29Revision
8.15 -- Function template instantiationAdded section: Using function templates in multiple files
2022 Mar 29Moved
6.13 -- Inline functionsMoved lesson from chapter 10 to chapter 6
2022 Mar 28New
6.14 -- Constexpr and consteval functionsNew lesson: Constexpr and consteval functions
2022 Mar 27Revision
4.13 -- Const variables and symbolic constantsAdded new section: "Constant expressions"
2022 Mar 20Revision
2.5 -- Introduction to local scopeAdded section: "Out of scope" vs "going out of scope"
2022 Mar 20Revision
4.18 -- Introduction to std::string_viewAdded sections: converting std::string to std::string_view, and passing strings to functions
2022 Mar 14Revision
6.13 -- Inline functionsRewrote lesson, added section on use of inline keyword in modern C++
2022 Feb 27Revision
0.10 -- Configuring your compiler: Compiler extensionsRemoved /Za as recommended setting for Visual Studio
2022 Feb 25Revision
10.4 -- Scoped enumerations (enum classes)Added section: Easing the conversion of scoped enumerators to integers (advanced)
2022 Feb 20Revision
7.x -- Chapter 7 summary and quizAdded quiz question
2022 Feb 20Revision
7.20 -- Generating random numbers using Mersenne TwisterRewrote and moved lesson
2022 Feb 20Revision
7.19 -- Introduction to random number generationRewrote and moved lesson
2022 Feb 20Feature
SiteStarted Changelog
Any web designers want to help restyle the above to make it more readable while remaining thematically consistent? Reach out via the contact form. Thanks!