Book review: C++17 in Detail
Tags: cpp, book, programming
Published: 2019-10-07 07:04:39

---
title: Book review: C++17 in Detail
published: true
date: 2019-10-06 20:57:31 UTC
tags: cpp,book,programming
canonical_url: http://asawicki.info/news_1715_book_review_c17_in_detail.html
---

Courtesy its author Bartłomiej Filipek, I was given an opportunity to read a new book [**"C++17 in Detail"**](https://leanpub.com/cpp17indetail). Here is my review:

When I am about to read or decide whether to buy a book, I first look at two things. These are not the looks of the cover or the description on the back. Instead, I check the table of contents and the number of pages. It gives me a good overview of the topics covered and the estimation of chances they are sufficiently covered. "C++17 in Detail" with its 361 pages looks good as for a book describing what's new in C++17 standard, considering the additions to the standard are not as extensive as they were in C++11. The author is undoubtedly an expert in this field, as seen from entries on his [Bartek's coding blog](https://www.bfilipek.com/).

Author claims to describe all the significant additions to the language. However, this is not a dull, difficult to read documentation of the new language elements, like you can find on [cppreference.com](https://en.cppreference.com/). Instead, the book describes each of them by giving some background and rationale, and showing real-life examples. It makes them easy to understand and to appreciate their usefulness. Each addition to the standard is also accompanied with a reference to the official documents by C++ standard committee and a table showing which versions of the most popular C++ compilers (GCC, Clang, Microsoft Visual C++) support it. Spoiler: They already support almost all of them :)

The book doesn't teach everything from scratch. That would be impossible in that number of pages, considering how big and complex C++ is. It assumes the reader already knows the language quite well, including some features from C++11 like `unique_ptr` or r-value reference + move semantics. It explains however few topics needed for the book in more details, like the concept of "reduce" and "scan" parallel algorithms, which C++17 adds to the standard library.

The contents of the book is grouped into 3 parts. Part 1 describes additions to the C++ language itself, including init statement for `if` and `switch` (e.g. `if(int i = Calculate(); i > 0) ...`), additions to templates like `if constexpr`, and attributes like `[[nodiscard]]`, `[[maybe_unused]]`. Part 2 describes what has been added to its standard library, including `std::optional`, `variant`, `any`, `string_view`, `filesystem`. Finally, part 3 shows more extensive code examples that combine multiple new C++ features to refactor existing code into more clean and more efficient one. The author also mentions what parts of the language have been deprecated or removed in the new standard (like `auto_ptr`).

To summarize, I recommend this book to any C++ developer. It's a good one, and it lets you stay up-to-date with the language standard. You will learn all new features of the language and its standard library from it in a more pleasing way than by reading documents from the C++ committee. Even if you won't be able to use these new features in your current project because your old compiler not upgraded for many years or the coding standard imposed by your team lead doesn't let you, I think it's worth learning those things. Who knows if you won't be asked about them on your next job interview?

You can buy printed version of the book on [Amazon.com](https://www.amazon.com/dp/1798834065) and electronic version on [Leanpub](https://leanpub.com/cpp17indetail). Bartek, the author of the book, also agreed to give all of the readers of my blog a nice discount - 30%. It's valid till the end of October, and to use it just visit [this link](https://leanpub.com/cpp17indetail/c/asawoct).