blog.michalt.pl

Pierwszy rzut oka na standard C++ 23

04.11.2021 0:01 Tech

Mamy już końcówkę 2021 roku, więc to chyba już najwyższy czas, aby przyjrzeć się chociaż części nowości w nadchodzącym dwudziestym trzecim standardzie języka C++. Dziś będzie bardzo wstępnie i pokrótce. Pamiętajcie o tym, że wszystko o czym tu napiszę, może nie pojawić się w nadchodzącym standardzie. Żadnego przytoczonego tu rozwiązania nie testowałem i nie kompilowałem. Przynajmniej część przytoczonych tu przykładów nie skompiluje się w ogóle na żadnym kompilatorze, ale jeśli ktoś chce próbować, może dokleić flagę -std=c++23 do swojego GCC lub CLanga.

Zacznijmy od tematu kontrowersyjnego, czyli odśmiecacza pamięci. W jedenastce pojawiło się wsparcie dla jego implementacji – żaden z obserwowanych przeze mnie kompilatorów (MSVC, GCC, Clang) nie dorobił się tego typu obsługi w bibliotece standardowej. W 23 żegnamy się z tym rozwiązaniem.


Zapowiadany jest również wielowymiarowy wariant operatora tablicowego.
Będzie można go wykorzystywać w następujący sposób:


a[7,4,5]

Jest to jedna z nowości, do których w przyszłości będę chciał wrócić i z pewnością skrobnę o tym wpis na blogu, gdy pojawi się wsparcie.

Jedną z nieomówionych w moich poprzednich wpisach nowości z dwudziestki jest aliasowanie typów w pętli zakresowej:


  for (typedef int typ; typ element : kolekcja)

Dwudziestka trójka go upraszcza i czyni bardziej czytelnym:


for (using typ = int; typ element : kolekcja)

Warto wspomnieć o tym, że typedef powoli staje się przestarzałym rozwiązaniem i zaleca się aliasowanie typów poprzez using.

Pojawi się też wsparcie dla Unicode Standard Annex 31 w nazwach aliasów, zmiennych, funkcji i klas - będą nie tylko ogonki, ale i część emotek – słitaśnie…

W nowym C++ ma się pojawić również biblioteka stosu wywołań stacktrace – to jedna z chyba najbardziej rewolucyjnych i z pewnością oczekiwanych (przynajmniej przeze mnie) nowości – to kolejne rozwiązanie do którego bardzo chętnie wrócę, gdy tylko pojawi się dla niego wsparcie.

W następnym standardzie pojawią się również dwie nowe instrukcje preprocesora: elifdef i elifndef – będą one stanowić alternatywę dla #elif defined() i #elif !defined().

Wydawało mi się, że pakietowanie to droga do rezygnacji z instrukcji preprocesora w kodzie – myliłem się, ale to dobrze bo ich stosowanie chyba jeszcze długo będzie miało sens.

Ponadto, pojawić ma się również std::byte_swap, które pozwoli nam na odwrócenie kolejności bajtów w zmiennej oraz metoda contains dla klasy std::string sprawdzająca czy napis zawiera podany w argumencie fragment tekstu.


To na tyle na dobry początek. Do przeczytania. :)