In-Place Construction for std::any, std::variant and std::optional

When you read articles or reference pages for std::any, std::optional or std::variant you might notice a few helper types called in_place_* available in constructors. Why do we need such syntax? Is this more efficient than “standard” construction? Intro We have the following in_place helper types: std::in_place_t type and a global value std::in_place - used for std::optional std::in_place_type_t type and a global value std::in_place_type - used for std::variant and std::any std::in_place_index_t type and a global value std::in_place_index - used for std::variant The helpers are used to efficiently initialise objects “in-place” - without additional temporary copy or move operations.

READ MORE...

Parallel STL And Filesystem: Files Word Count Example

Last week you might have read about a few examples of parallel algorithms. Today I have one more application that combines the ideas from the previous post. We’ll use parallel algorithms and the standard filesystem to count words in all text files in a given directory. The Case In my previous post, there were two examples: one with iterating over a directory and counting the files sizes and the next one about counting words in a string.

READ MORE...

A Wall of Your std::optional Examples

Two weeks ago I asked you for help: I wanted to build a wall of examples of std::optional. I’m very grateful that a lot of you responded and I could move forward with the plan! You’re amazing! Let’s dive in the examples my readers have sent me! A Reminder To remind, I asked for some real-life examples of std::optional.

READ MORE...

Everything You Need to Know About std::variant from C++17

Around the time C++17 was being standardized I saw magical terms like “discriminated union”, “type-safe union” or “sum type” floating around. Later it appeared to mean the same type: “variant”. Let’s see how this brand new std::variant from C++17 works and where it might be useful. The Basics In my experience, I haven’t used unions much.

READ MORE...

Show me your code: std::optional

Show me your code! I’d like to run a little experiment. Let’s build a wall of examples of std::optional! Intro In the last three articles of my C++17 STL series I’ve been discussing how to use std::optional. I can talk and talk… or write and write… but I’m wondering how do you use this wrapper type?

READ MORE...

Error Handling and std::optional

In my last two posts in the C++17 STL series, I covered how to use std::optional. This wrapper type (also called “vocabulary type”) is handy when you’d like to express that something is ‘nullable’ and might be ‘empty’. For example, you can return std::nullopt to indicate that the code generated an error… but it this the best choice?

READ MORE...

Using C++17 std::optional

Let’s take a pair of two types <YourType, bool> - what can you do with such composition? In this article, I’ll describe std:optional - a new helper type added in C++17. It’s a wrapper for your type and a flag that indicates if the value is initialized or not. Let’s see where it can be useful and how you can use it.

READ MORE...

Refactoring with C++17 std::optional

There are many situations where you need to express that something is “optional” - an object that might contain a value or not. You have several options to implement such case, but with C++17 there’s probably the most helpful way: std::optional. For today I’ve prepared one refactoring case where you can learn how to apply this new C++17 feature.

READ MORE...

The C++ Standard Library book - overview & giveaway

Let’s have a quick overview of another book related to Modern C++ and The Standard Library. This time I picked Rainer Grimm’s book the author of the modernescpp blog. Read more if you’d like to win C++ book bundle! :) The book The C++ Standard Library What every professional C++ programmer should know about the C++ standard library

READ MORE...

C++17 in details: Standard Library Utilities

The new C++ standard brings many useful additions to the Standard Library. So far we’ve discussed bigger features like the filesystem or parallel algorithms. Today, I want to focus on smaller, but also handy things. For example, there are utils for handling type safe unions, replacement of void*, string searchers and much more.

READ MORE...