Jonathan Müller

C++ Features You Might Not Know

Did you know `4[array]` is valid C++? This talk uncovers the language's most obscure and horrifying features you were never taught.

C++ Features You Might Not Know
#1about 1 minute

Understanding commutative array indexing in C++

The built-in array index operator is commutative because it is defined in terms of pointer arithmetic, allowing for unusual but valid syntax like `index[array]`.

#2about 1 minute

Using the unary plus operator for type promotion

The unary plus operator can be used to trigger integral promotions, convert enums to their underlying type, and decay arrays or lambdas to function pointers.

#3about 1 minute

Leveraging the comma operator with fold expressions

The comma operator evaluates expressions from left to right, making it a powerful tool for applying an operation to each element of a parameter pack using a fold expression.

#4about 4 minutes

Exploring quirks in C++ control flow syntax

The `else if` construct is just an `else` followed by an `if` statement, and `switch` statements allow for unusual structures like placing the default case first or implementing Duff's device.

#5about 2 minutes

Handling floating-point exceptions and NaN values

C++ provides functions to test for floating-point exceptions like division by zero and to create specific "Not a Number" (NaN) values, which can be used for techniques like NaN boxing.

#6about 1 minute

The flexibility of declaration specifier order

Declaration specifiers like `const`, `unsigned`, `static`, and `inline` can appear in any order before the type name, allowing for unconventional but valid declarations.

#7about 1 minute

Decoding complex C++ declarators

The declarator part of a declaration, which includes the name and operators like `*` or `()`, can be combined to declare pointers, variables, and functions in a single statement.

#8about 1 minute

Using function try blocks in constructors

Function try blocks are essential for catching exceptions thrown from a constructor's member initializer list, as a regular try-catch block cannot surround it.

#9about 1 minute

The overlooked `std::valarray` for vector math

`std::valarray` is a standard library container designed for efficient, element-wise numerical operations and can be a good alternative to custom vector types for mathematical computations.

#10about 1 minute

Finding the most derived object with `dynamic_cast`

Using `dynamic_cast<void*>` on a pointer to a base class returns the address of the most derived object in the hierarchy, which is useful for type-erasure implementations.

#11about 2 minutes

Leveraging the common initial sequence in unions

The common initial sequence rule allows reading non-active members of a union if they share the same initial layout, enabling space optimization by overlaying common fields.

#12about 2 minutes

Undefined behavior in signed integer arithmetic

Signed integer overflow is undefined behavior in C++, which can occur not only in addition and multiplication but also in specific division cases like `INT_MIN / -1`.

#13about 3 minutes

The `sizeof` operator precedence puzzle

The `sizeof` operator has lower precedence than the array index operator, leading to surprising results where `sizeof +a[i]` is parsed as `sizeof(+(a[i]))`.

Related jobs
Jobs that call for the skills explored in this talk.

Featured Partners

Related Articles

View all articles
DC
Daniel Cranney
Dev Digest 188: CfP time, the risks of NPM and IKEA algorithms
Inside last week’s Dev Digest 188 . 🤖 GitHub Copilot CLI is now in public review 💻 Microsoft is bringing ‘vibe working’ to office apps 🎣 Attackers abuse AI tools to generate captchas in fishing attacks ⚠️ When LLMs autonomously attack 🧠 Common cause...
Dev Digest 188: CfP time, the risks of NPM and IKEA algorithms
CH
Chris Heilmann
All the videos of Halfstack London 2024!
Last month was Halfstack London, a conference about the web, JavaScript and half a dozen other things. We were there to deliver a talk, but also to record all the sessions and we're happy to share them with you. It took a bit as we had to wait for th...
All the videos of Halfstack London 2024!
DC
Daniel Cranney
Dev Digest 193: Vibe Coding Honeymoon, NaN and the End of Interviews
Inside last week’s Dev Digest 193 . 🛰️ A satellite of doom 🤔 Why em-dashes? 😔 Vibe coding Honeymoon is over 🖼️ GenAI image showdown 🔥 Dangers of firewalls and VPNs 👨‍💼 AI broke interviews 🦉 A LinkedIn wisdom generator 🗞️ Join over 150,000 developers...
Dev Digest 193: Vibe Coding Honeymoon, NaN and the End of Interviews
BR
Benjamin Ruschin
What Developers Really Need to Create Great Code Demos
Every developer on earth has, at some point, had another developer to thank for a breakthrough, a success, an aha moment they wouldn’t have had without coming across that blog post, that open-source contribution, that reply on socials or that humble ...
What Developers Really Need to Create Great Code Demos

From learning to earning

Jobs that call for the skills explored in this talk.

Rust and GoLang

Rust and GoLang

NHe4a GmbH
Karlsruhe, Germany

Remote
55-65K
Intermediate
Senior
Go
Rust