C++17 en images
Copyright 2017 olibre CC BY-SA 4.0
- Présentation : cppfrug.org/paris/events/2017-05-18_n17/Cpp17-en-images/reveal.html
- Site statique : cppfrug.org/paris/events/2017-05-18_n17/Cpp17-en-images
- Source : github.com/cpp-frug/paris/events/2017-05-18_n17/Cpp17-en-images
C’était mieux avant ?
C++ a une quarantaine d’années
- 1977 Bjarne rêve au C with classes
- 1990 Schisme entre C et C++
- 1998 Premier standard –> C++98
- 2017 Cinquième standard –> C++17
C++17 c’est un gros pavé
C++17 ajoute 254 pages
Date | ISO/IEC ou Draft | Pages |
---|---|---|
1998-09-01 | C++98 14882:1998 | 776 pages |
2003-10-15 | C++03 14882:2003 | 786 pages (+ 1%) |
2011-09-01 | C++11 14882:2011 | 1356 pages (+73%) |
2012-02-28 | C++11 N3376 | 1324 pages |
2014-11-19 | C++14 N4296 | 1368 pages (+ 3%) |
2017-03-21 | C++17 N4659 | 1622 pages (+19%) |
2016 : Deux réunions pour figer le périmètre du C++17
Photo prise à Oulu par Loïc Joly à 23h.
La nuit à 1h à Tromsø à 600 km de Oulu en juin
Les Concepts et Reflexion étaient très attendues
2003 - Bjarne Stroustrup présente les Concepts au comité C++
Quoi ! Pas pour C++03 ?
Bon Okey, C++03 n’est qu’une version mineure…
2011 - Les Concepts
Quoi ! Pas pour C++11 ?
Bon Okey, faut bien arrêter de repousser C++0x…
2014 - Les Concepts
Quoi ! Pas pour C++14 ?
Bon Okey, C++14 n’est qu’une version mineure…
2017 - Les Concepts
Quoi ! Pas pour C++17 ?
Bon Okey, mais on arrête les versions mineures…
De très nombreuses décénies plus tard, les Concepts sont enfin intégrés
Ce n’est pas trop tôt !
Un air de promesses électorales
C++17
dépoussière le standard C++
The C++ Programming Language de Bjarne Stroustrup
Quatrième édition publiée en 2013
à la page 1046 du paragraphe
36.3.6 STL‐like Operations
The
replace()
replaces one substring with another and adjusts thestring
’s size accordingly. For example:void f() { string s = "but I have heard it works even if you don't believe in it"; s.replace(0,4,""); // erase initial "but " s.replace(s.find("even"),4,"only"); s.replace(s.find(" don't"),6,""); // erase by replacing with "" assert(s=="I have heard it works only if you believe in it"); }
A
replace()
returns a reference to the object for which it was called. This can be used for chaining operations:void f2() { string s = "but I have heard it works even if you don't believe in it"; s.replace(0,4,"").replace(s.find("even"),4,"only").replace(s.find(" don't"),6,""); assert(s=="I have heard it works only if you believe in it"); }
Virgule flottante en hexadécimal
P0245 officialise les hexadecimal floating literals (comme pour C99, Java 5 2004)
float v = 0x'Baffe.bobo'p1f;
double w = 0x'C0DE'2017'1.cafe'p1;
Variable inline
(P0386)
- Après les variables
template
(C++14) - Fin du One Definition Rule ?
auto x{42};
déduit comme int x{42};
N3922 comble un trou dans les règles de déduction pour auto
à partir des {
listes d’initialisation}
auto a {1}; //OK => int a{1};
auto b = {1}; //OK => std::initializer_list<int> b = {1};
auto c {1, 2}; //KO car plus d'un élément
auto d = {1, 2}; //OK => std::initializer_list<int> d = {1, 2};
auto e {1, 2.0}; //KO car plus d'un élément
auto f = {1, 2.0}; //KO car pas le même type (int et double)
Apple ][ (1977-1988)
Ou sont les accolade et crochet ?
BBC Master (1986-1994)
Ah les crochets, mais pas les accolades ?
/??/
/??/ Avec trigraphes
??=include <iostream>
int main (int argc, char *argv??(??)) ??<
const char txt??(??) = "J'aime le C++17??/0";
std::cout << txt << std::endl;
??>
/\
/\ Sans trigraphe
#include <iostream>
int main (int argc, char *argv[]) {
const char txt[] = "J'aime le C++17";
std::cout << txt << std::endl;
}
Suppression des trigraphes
C++11 : Trigraphes prévus pour être obsolètes.
Mais des membres du comité se sont opposés.
C++17 - N4086 les supprime
sans passer par l’étape deprecated.
N3928 permet static_assert(condition)
sans le second paramètre message
.
// Les static_assert avec un message vide étaient courants
static_assert(sizeof(int) == 4, "");
// C++17 a été influencé par l'usage (mauvaise pratique ?)
static_assert(sizeof(int) == 4);
Devinette
À quels aspects C++17
la prochaine image fait référence ?
Les prochains sujets ?
Singletons
Ce n’est pas si évident que cela
Et ce n’est pas toujours pertinent
P0135
Simplification de la taxonomie
et conséquence sur la copie elision
lvalue xvalue rvalue prvalue glvalue
Convertir un enum
en string
et inversement
- Est-ce possible ?
- Sans les macros ?
- À la compilation ? À l’exécution ?
- Et les
enum class
? - La réflexion statique C++20 est elle LA solution ?
CMake
Astuces et C++
Controverses
Loïc se propose de partager les débats pour lesquels les membres du comité C++ ne sont pas sûrs d’aller dans la bonne direction.
La parole est à la communauté C++FRUG.