# I know C++ 2003 How to start learning C++ 2017?

Computer Science Educators Asked on March 11, 2021

Tl;dr – the subject is enough. For background, read below.

I am a professional, freelance, embedded software developer. I first learned about C++ in the 90s and taught myself from a book C++ for C programmers.

The beauty of that was that it assumed that I knew C and didn’t have to spend chapter after chapter explaining how to declare a variable/what a variable is, function/passing parameters/returning a result, loops, etc, etc, etc.

So, it cut quickly to the chase and I started learning from page 1, rather than skipping forward.

Fast (?) forward a few decades, and I no longer code (much) assembler. Work seems to be split between C, Ada (mostly for defence) and C++.

It has been four years since my last C++ gig, and, industry being conservative does not adopt new version of languages for some time, until they can be seen to be widely accepted as stable (if any of you non-industry guys what to know why, then we generally want to wait until "they get the bugs out of the new compiler". Given that a lot of embedded can be life-critical, you can understand why).

So, now I am seeing ads requiring C++ 2014 and 2017 (and my latest experience is 2003). The delicious irony of this is that I know, from bitter experience, that coding standards will forbid me from using the new features intruded in those versions.

All of my life, I have taught myself new languages & concepts from books. Earlier this year, I took a leap of faith & taught myself Flutter/Dart (for personal, non-professional use) from a Udemy course. That was an eye-opener, and I won’t be responsible for the death of any more trees in future.

But, I digress (this entire screed has been a digression, if you ask me). I have now purchased another Udemy course to learn C++.

And, finally, after all of that, my question is still the same as its title – "I know C++ 2003 How to start learning C++ 2017 ?".

Do I watch the start of each chapter, and skip if I yawn? Do I read the table of contents and take a stab at where to jump in?

Given that you are a group of educators, I imagine that this is not a new situation to you, but am not sure that it has an answer which does not involve the length of pieces of string.

I had a similar problem 8/9 years ago, but with C++11.

The trick is that there is no trick. You simply sit and use the feature you want to use. Besides that it is also beneficial to know C++14 before getting into C++17 and know C++11 before getting familiar with C++14 features. (Obviously prerequisite for C++11 is C++03/98, but that's already covered by OP).

If getting up-to-date with C++17 (C++20 actually was vote in 2020) I would start with feature list grouped here. The problem is that there are so many of them that one may have problems in how to approach them, thus I've provided an ordered list that shows how I would teach it to people:

## Basic C++11 stuff

• move semantics (overview + SO question) - move semantics and rvalue references are the corner stone of modern C++, what follows is the rule of 5 (or 3/5/0 if being precise)
• auto
• lambda expressions
• ranged for loops - because for(auto const& e: {1, 2, 3}) { std::cout <<e <<'n'; } is so cool :)
• classes related stuff:
• constexpr specifier
• initializers lists - it is used mainly in std::vector<...> so it's important to know how it works and what are problems involved with them (it is not my favourite C++11 feature)

## C++14 & C++17

• After these basics I would read about the other C++11 related features or moved to C++14 features listed here (and consult C++11 features list when necessary). Note that C++14 was a nice little amendment to C++11 so there aren't many new (and cool) stuff.
• C++17 features worth mentioning (very subjective opinion, at this point you should already know what you want/need to know):

## C++20

• Concepts are the new big thing
• immediate functions
• IMHO modules will be a dead end as long as C++ will be split into header and implementation fiels (besides Rust have better package/modules concept). But that's just an opinion bouncing in my head.
• Remaining C++20 and previous version stuff (obviously only a fraction was covered in this post :)).

Correct answer by shycha on March 11, 2021

I would guess that taking such courses is a gross waste of time unless they are specifically focused on recent additions to C++. Most of the "beginning C++ courses" won't even get you to essential new features.

I haven't followed updates to the language for a long time but first, I think that the "new" language is backward compatible with the "old" language (unlike Python). So, what you need are incremental changes in most things to what you already know.

But I also think that the programming style in modern C++ has changed, depending more on library code than was true in the past. What you need to do is find a way to become comfortable with that newer programming style.

I would think that a book like this one from the very capable Scott Myers would get you started. I don't have the book, but Myers has been trustworthy in the past. Use the ideas there to build something significant.

Answered by Buffy on March 11, 2021

## Related Questions

### Book recommendations for self studying Data Structures in depth in an elegant manner

2  Asked on August 21, 2021

### How can I prepare for DASCA Data Science certification if I am in UG?

1  Asked on August 21, 2021 by aether

### Java: The Complete Reference, which edition to follow

4  Asked on August 21, 2021

### Error free solution manual for “Introduction to Algorithms” by Cormen et al. for self study or alternative method to tackle them single handed

0  Asked on August 21, 2021

### The theory of parsing, translation, and compiling, v.s. Compilers: Principles, Techniques, and Tools?

1  Asked on August 21, 2021

### Principles of Compiler Design v/s Compilers: Principles, Techniques and Tools by Aho, Ullman

1  Asked on August 21, 2021 by ran-mouri

### How useful it is for math student to learn programming to find proofs or counterexamples?

3  Asked on August 21, 2021 by mathlearner

### Problem book for Haskell course

1  Asked on August 21, 2021 by paus

### Teaching an absolute beginners class Operating Systems with Rust

1  Asked on August 21, 2021 by ljrk

### Detailed video lecture that gives in-depth explanation of the intuition behind Fibonacci Heaps operations

0  Asked on August 21, 2021 by abhishek-ghosh

### How do you wow second-year students into saying “bare-metal programming is cool!”?

5  Asked on August 18, 2021 by johnnyapplesauce

### Grading source code in an online environment

5  Asked on August 8, 2021 by levon

### MERN – Which textbook to use?

1  Asked on July 30, 2021

### Concern over plagiarism in designing online course

1  Asked on July 23, 2021 by essentialanonymity

### Algorithm Design challenges

2  Asked on July 20, 2021

### How should Parsons Problems be graded?

0  Asked on July 9, 2021

### Why GAN is Unsupervised Learning?

0  Asked on July 2, 2021 by failed-scientist

### Should assembly language be taught in an introductory course (or soon after)?

12  Asked on July 1, 2021

### How do I approach teaching Python to 12-year-olds as a first-time teacher?

10  Asked on June 26, 2021 by koscicz

### Robotics Recommendations

2  Asked on June 24, 2021 by birwin