Modern C++
Programming
1a. Preparation
Federico Busato
2024-03-29
Table of Contents
1 Books and References
2 Slide Legend
3 What Editor/ IDE/Compiler Should I Use?
4 How to compile?
5 Hello World
I/O Stream
1/22
Books and
References
Suggested Books
Programming and Principles
using C++ (2nd)
B. Stroustrup, 2014
Professional C++ (5th)
S. J. Kleper, N. A. Solter, 2021
Absolute C++ (6th)
W. Savitch, 2015
2/22
More Advanced Books
Eﬀective Modern C++
S. Meyer, 2014
Embracing Modern C++
Safely
J. Lakos, V. Romeo, R.
Khlebnikov, A. Meredith, 2021
Beautiful C++: 30 Core
Guidelines for Writing Clean,
Safe, and Fast Code
J. G. Davidson, K. Gregory, 2021
3/22
References 1/3
(Un)oﬃcial C++ reference:*
• en.cppreference.com
• C++ Standard Draft
Tutorials:
• www.learncpp.com
• www.tutorialspoint.com/cplusplus
• en.wikibooks.org/wiki/C++
• yet another insignificant...programming notes
Other resources:
• stackoverflow.com/questions/tagged/c++
* The full C++ standard draft can be found at eel.is/c++draft/full (32 MB!)
4/22
References 3/3
News:
• isocpp.org (Standard C++ Foundation)
• cpp.libhunt.com/newsletter/archive
• www.meetingcpp.com/blog/blogroll/
Main conferences:
• www.meetingcpp.com (slides)
• cppcon.org (slides)
• isocpp.com conference list
Coding exercises and other resources:
• www.hackerrank.com/domains/cpp
• leetcode.com/problemset/algorithms
• open.kattis.com
• cpppatterns.com
5/22
Slide Legend
Slide Legend 1/2
⋆
Advanced Concepts. In general, they are not fundamental. They can be
related to very speciﬁc aspects of the language or provide a deeper
exploration of C++ features.
A beginner reader should skip these sections/slides
⇝ See next. C++ concepts are closely linked, and it is almost impossible to
ﬁnd a way to explain them without referring to future topics. These slides
should be revisited after reading the suggested topic
 Homework. The slide contains questions/exercises for the reader
6/22
Slide Legend 2/2
this is a code section
This is a language keyword/token and not a program symbol (variable, functions,
etc.). Future references to the token could use a standard code section for better
readability
7/22
What Editor/
IDE/Compiler
Should I Use?
What Compiler Should I Use?
Most popular compilers:
• Microsoft Visual Code (MSVC) is the compiler oﬀered by Microsoft
• The GNU Compiler Collection (GCC) contains the most popular C++ Linux
compiler
• Clang is a C++ compiler based on LLVM Infrastructure available for
Linux/Windows/Apple (default) platforms
Suggested compiler on Linux for beginner: Clang
• Comparable performance with GCC/MSVC and low memory usage
• Expressive diagnostics (examples and propose corrections)
• Strict C++ compliance. GCC/MSVC compatibility (inverse direction is not ensured)
• Includes very useful tools: memory sanitizer, static code analyzer, automatic formatting,
linter, etc.
8/22
Install the Compiler on Linux
Install the last gcc/g++ (v11) (v12 on Ubuntu 22.04)
$ sudo add-apt-repository ppa:ubuntu-toolchain-r/test
$ sudo apt update
$ sudo apt install gcc-12 g++-12
$ gcc-12 --version
Install the last clang/clang++ (v17)
$ bash -c "$(wget -O - https://apt.llvm.org/llvm.sh)"
$ wget https://apt.llvm.org/llvm.sh
$ chmod +x llvm.sh
$ sudo ./llvm.sh 17
$ clang++ --version
9/22
Install the Compiler on Windows
Microsoft Visual Studio
• Direct Installer: Visual Studio Community 2022
Clang on Windows
Two ways:
• Windows Subsystem for Linux (WSL)
• Run → optionalfeatures
• Select Windows Subsystem for Linux , Hyper-V ,
Virtual Machine Platform
• Run → ms-windows-store: → Search and install Ubuntu 22.04 LTS
• Clang + MSVC Build Tools
• Download Build Tools per Visual Studio
• Install Desktop development with C++
10/22
What Editor/IDE/Compiler Should I Use? 1/3
Popular C++ IDE (Integrated Development Environment):
• Microsoft Visual Studio (MSVC) (link). Most popular IDE for Windows
• Clion (link). (free for student). Powerful IDE with a lot of options
• QT-Creator (link). Fast (written in C++), simple
• XCode. Default on Mac OS
• Cevelop (Eclipse) (link)
Standalone GUI-based coding editors:
• Microsoft Visual Studio Code (VSCode) (link)
• Sublime (link)
• Lapce (link)
• Zed (link)
11/22
What Editor/IDE/Compiler Should I Use? 2/3
Standalone text-based coding editors (powerful, but needs expertise):
• Vim
• Emacs
• NeoVim (link)
• Helix (link)
Not suggested: Notepad, Gedit, and other similar editors (lack of support for
programming)
12/22
What Editor/IDE/Compiler Should I Use? 3/3
StackOverflow Developer Survey 2022
13/22
How to compile?
How to Compile?
Compile C++11, C++14, C++17, C++20, C++23, C++26 programs:
g++ -std=c++11 <program.cpp> -o program
g++ -std=c++14 <program.cpp> -o program
g++ -std=c++17 <program.cpp> -o program
g++ -std=c++20 <program.cpp> -o program
g++ -std=c++23 <program.cpp> -o program
g++ -std=c++26 <program.cpp> -o program
Any C++ standard is backward compatible*
C++ is also backward compatible with C in most case, except if it contains C++
keywords (new, template, class, typename, etc.)
We can potentially compile a pure C program in C++26
*except for very minor deprecated features
14/22
C++ Standard 1/2
Compiler
C++11 C++14 C++17 C++20
Core Library Core Library Core Library Core Library
g++ 4.8.1 5.1 5.1 5.1 7.1 9.0 11+ 11+
clang++ 3.3 3.3 3.4 3.5 5.0 11.0 16+ 16+
MSVC 19.0 19.0 19.10 19.0 19.15 19.15 19.29+ 19.29
en.cppreference.com/w/cpp/compiler support
15/22
C++ Standard 2/2
16/22
Hello World
Hello World 1/2
C code with printf :
#include <stdio.h>
int main() {
printf("Hello World!\n");
}
printf
prints on standard output
C++ code with streams :
#include <iostream>
int main() {
std::cout << "Hello World!\n";
}
cout
represents the standard output stream
17/22
Hello World 2/2
The previous example can be written with the global std namespace:
#include <iostream>
using namespace std;
int main() {
cout << "Hello World!\n";
}
Note: For sake of space and for improving the readability, we intentionally omit the
std namespace in most slides
18/22
I/O Stream (std::cout) 1/3
std::cout is an example of output stream. Data is redirected to a destination, in
this case the destination is the standard output
#include <stdio.h>
int main() {
int a = 4;
double b = 3.0;
char c[] = "hello";
printf("%d %f %s\n", a, b, c);
}
#include <iostream>
int main() {
int a = 4;
double b = 3.0;
char c[] = "hello";
std::cout << a << " " << b << " " << c << "\n";
}
19/22
C:
C++:
I/O Stream (Why should we prefer I/O stream?) 2/3
• Type-safe: The type of object provided to the I/O stream is known statically by the
compiler. In contrast, printf uses % ﬁelds to ﬁgure out the types dynamically
• Less error prone: With I/O Stream, there are no redundant % tokens that have to
be consistent with the actual objects passed to I/O stream. Removing redundancy
removes a class of errors
• Extensible: The C++ I/O Stream mechanism allows new user-deﬁned types to be
passed to I/O stream without breaking existing code
• Comparable performance: If used correctly may be faster than C I/O ( printf ,
scanf , etc.) .
20/22
I/O Stream (Common C errors) 3/3
• Forget the number of parameters:
printf("long phrase %d long phrase %d", 3);
• Use the wrong format:
int a = 3;
...many lines of code...
printf(" %f", a);
• The %c conversion speciﬁer does not automatically skip any leading white space:
scanf("%d", &var1);
scanf(" %c", &var2);
21/22
std::print
C++23 introduces an improved version of printf function std::print based on
formatter strings that provides all beneﬁts of C++ stream and is less verbose
#include <print>
int main() {
std::print("Hello World! {}, {}, {}\n", 3, 4ll, "aa");
// print "Hello World! 3 4 aa"
}
This will be the default way to print when the C++23 standard is widely adopted
22/22