> For the complete documentation index, see [llms.txt](https://tobanteaudio.gitbook.io/juce-cookbook/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://tobanteaudio.gitbook.io/juce-cookbook/cpp.md).

# C++

To use all of the latest JUCE features you should at least use C++14 as your standard. Any newer standard works as well.

## Idioms

If the list of idioms & language features below seems familiar to you, you're at a great starting point. If not, I have provided some resources below.

* Composition
* Inheritance
  * `virtual` / `override` / `final`
  * [CppCon 2017: Louis Dionne “Runtime Polymorphism: Back to the Basics”](https://www.youtube.com/watch?v=gVGtNFg4ay0\&t=3296s)
* Lambdas
  * [CppCon 2019: Arthur O'Dwyer “Back to Basics: Lambdas from Scratch”](https://www.youtube.com/watch?v=3jCOwajNch0)
* RAII
  * [CppCon 2019: Arthur O'Dwyer “Back to Basics: RAII and the Rule of Zero”](https://www.youtube.com/watch?v=7Qgd9B1KuMQ\&t=3039s)
* Constexpr
  * [CppCon 2015: Scott Schurr “constexpr: Introduction”](https://www.youtube.com/watch?v=fZjYCQ8dzTc)
  * [CppCon 2015: Scott Schurr “constexpr: Applications"](https://www.youtube.com/watch?v=qO-9yiAOQqc)
* Atomic/Lock
  * [CppCon 2019: Rainer Grimm “Atomics, Locks, and Tasks (part 1 of 2)”](https://www.youtube.com/watch?v=o0i2fc0Keo8\&list=PL5qoVlA-tv09ykIIPHP9N6vgJaFPnYWCa\&index=16)
  * [CppCon 2019: Rainer Grimm “Atomics, Locks, and Tasks (part 2 of 2)”](https://www.youtube.com/watch?v=_eaB69ta_ig\&list=PL5qoVlA-tv09ykIIPHP9N6vgJaFPnYWCa\&index=17)
* Smart Pointer (unique & shared)
  * [CppCon 2019: Arthur O'Dwyer “Back to Basics: Smart Pointers”](https://www.youtube.com/watch?v=xGDLkt-jBJ4)
* Exceptions:
  * [CppCon 2019: Ben Saks “Back to Basics: Exception Handling and Exception Safety”](https://www.youtube.com/watch?v=W6jZKibuJpU)
* Where possible: `noexcept`/`const`
  * [CppCon 2019: Dan Saks “Back to Basics: Const as a Promise”](https://www.youtube.com/watch?v=NZtr93iL3R0\&t=455s)
* Container
  * array
  * vector
  * map
