C++23 est une version de la norme ISO /IEC 14882 définissant le langage de programmation C++ qui suit la version C++20 [ 1] . La norme a été finalisée par le WG21 lors de la réunion à Issaquah en février 2023[ 2] . Le dernier working draft gratuit est le N4950, qui date du 10 mai 2023 [ 3] .
Fonctionnalités
Les modifications qui ont été acceptées pour inclusion dans C++23 incluent :
Langage
if consteval
[ 4]
opérateur d'indexation []
multidimensionnel (par exemple v [ 1 , 3 , 7 ] = 42 ;
)[ 5]
opérateurs d'appel ()
et d'indexation []
statiques et lambdas statiques[ 6] , [ 7]
auto ( x )
et auto { x }
[ 8]
nouvelles directives de préprocesseur :
#elifdef
et #elifndef
[ 9]
#warning
[ 10]
extension de la durée de vie de certaines temporaires dans les boucles for
range-based[ 11]
nouvel attribut standard [[ assume ( expression )]]
[ 12]
déduction des arguments de classe template depuis les constructeurs hérités[ 13]
labels à la fin d'un bloc d'instructions[ 14]
déclaration d'alias dans les init-statements[ 15]
suffixes littéraux uz
et z
pour std :: size_t
et std :: ssize_t
[ 16]
types flottants étendus std :: float16_t
, std :: float32_t
, std :: float64_t
, std :: float128_t
, std :: bfloat16_t
[ 17]
()
facultatif pour les expressions lambdas nullaires [ 18]
attributs sur les expressions lambdas[ 19]
modifications de constexpr
:
variables non-littérales, labels, et gotos dans les fonctions constexpr
[ 20]
variables static
et thread_local
dans les fonctions constexpr
[ 21]
les fonctions constexpr
n'ont plus besoin que leur type de retour et leurs types de paramètres soient des types littéraux
réduction des conversions contextuelles vers bool
dans les static_assert
et if constexpr
[ 22]
suppression des espaces avant la jonction des lignes[ 23]
séquences d'échappement délimitées[ 24]
caractères d'échappement universels nommés[ 25]
modifications de l'encodage du texte :
prise en charge de l'UTF-8 comme encodage de fichier source portable[ 26]
encodage cohérent des caractères littéraux[ 27]
jeux de caractères et encodages[ 28]
Bibliothèque
Références
↑ (en) « The Standard : Standard C++ », sur isocpp.org (consulté le 5 juin 2024 )
↑ (en) Herb Sutter , « C++23 “Pandemic Edition” is complete (Trip report: Winter ISO C++ standards meeting, Issaquah, WA, USA) », sur Sutter’s Mill , 13 février 2023 (consulté le 5 juin 2024 )
↑ (en) Working Draft, Standard for Programming Language C++ , 10 mai 2023 (lire en ligne )
↑ (en) Barry Revzin, Richard Smith, Andrew Sutton et Daveed Vandevoorde, « if consteval », 22 mars 2021
↑ (en) Mark Hoemmen, Daisy Hollman, Corentin Jabot, Isabella Muerte et Christian Trott, « Multidimensional subscript operator », 14 septembre 2021
↑ (en) « static operator() », 8 avril 2022
↑ (en) « static operator[] », 11 novembre 2022
↑ (en) Zhihao Yuan, « auto(x): decay-copy in the language », 12 juillet 2021
↑ (en) Melanie Blower, « Add support for preprocessing directives elifdef and elifndef », 30 avril 2021
↑ (en) Aaron Ballman, « Support for #warning », 13 janvier 2022
↑ (en) « Wording for P2644R1 Fix for Range-based for Loop », 11 novembre 2022
↑ (en) « Portable assumptions », 22 avril 2022
↑ (en) Timur Doumler, « Wording for class template argument deduction from inherited constructors », 20 mai 2022
↑ (en) « Labels at the end of compound statements (C compatibility) », 13 janvier 2022
↑ (en) Jens Maurer, « Extend init-statement to allow alias-declaration », 13 avril 2021
↑ (en) JeanHeyd Meneide et Rein Halbersma, « Literal Suffix for (signed) size_t », 24 novembre 2019
↑ (en) « Extended floating-point types and standard names », 22 avril 2022
↑ (en) Alex Christensen et JF Bastien, « P1102R2: Down with ()! », 11 décembre 2020
↑ (en) « Attributes on Lambda-Expressions »
↑ (en) Ville Voutilainen, « Non-literal variables (and labels and gotos) in constexpr functions », 12 juillet 2021
↑ (en) « Permitting static constexpr
variables in constexpr
functions », 7 novembre 2022
↑ (en) Andrzej Krzemieński, « Narrowing contextual conversions to bool », 12 avril 2021
↑ (en) Corentin Jabot, « Trimming whitespaces before line splicing », 13 avril 2021
↑ (en) « Delimited escape sequences », 25 février 2022
↑ (en) « Named universal character escapes », 25 mars 2022
↑ (en) « Support for UTF-8 as a portable source file encoding », 1er juillet 2022
↑ (en) Corentin Jabot, « Consistent character literal encoding », 14 septembre 2021
↑ (en) Jens Maurer, « Character sets and encodings », 21 septembre 2021