Pierwszy rzut oka na standard C++ 23
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. :)