#modern C++

wszystkie notatki oznaczone etykietą "modern C++"

Niespójne i mylące konstruktory w std::string

Kiedyś często problemem były niejawne konwersje między typami w C++, które szczególnie uwidaczniały się przy konstruktorach konwersji… Kto by pomyślał, że dziś nadał trywialne błędy można popełnić przez jakieś zaszłości historyczne, usilne zachowanie kompatybilności i brak spójności w definiowaniu konstruktorów, nawet tych w Standardzie ;) Problemy te co jakiś czas są na nowo “odkrywane”, ostatnio powróciły w nieco prześmiewczym kodzie na twitterze: const std::string str = "Modern C++"; std::string s1 { "Modern C++", 3 }; std::string s2 { str, 3 }; std::cout << "S1: " << s1 << "\n"; std::cout << "S2: " << s2 << "\n"; Intuicyjnie mogłoby się wydawać, że obiekty s1 i s2 będą zawierać taką samą zawartość.

Czytaj dalej

C++20 nowym standardem!

Tuż przed weekendem, jak podaje Herb Sutter na swoim blogu, oficjalnie C++20 stał się już nowym standardem ISO: On Friday September 4, C++20’s DIS (Draft International Standard) ballot ended, and it passed unanimously. This means that C++20 has now received final technical approval and is done with ISO balloting, and we expect it to be formally published toward the end of 2020 after we finish a final round of ISO editorial work.

Czytaj dalej

C++20 formalnie (prawie) gotowe...

http://herbsutter.com/2020/02/15/trip-report-winter-iso-c-standards-meeting-prague/ http://www.reddit.com/r/cpp/comments/f47x4o/202002_prague_iso_c_committee_trip_report_c20_is/

C++17 formalnie (prawie) gotowe...

W marcu tego roku, na spotkaniu komitetu standaryzacyjnego C++ w Kona, technicznie zakończono prace nad nową odsłoną standardu języka C++. Nowy draft DIS (N4660) przesłano do finalnego balotowania przez ISO (ISO ballot) i za 5-6 miesięcy oficjalnie powitamy C++17. Zapewne, prócz drobnych ewentualnych korekt w dokumencie, technicznie nic się nie zmieni, więc nieformalnie takie drafty traktowane są już przez społeczność jako standard. Obecnie ostatnim dostępnym dokumentem jest N4659 (różniący się jedynie formatowaniem od niedostępnego publicznie N4660).

Czytaj dalej

Elementy usunięte w C++17

W przyszłym roku prawdopodobnie wejdzie w życie nowa, większa odsłona (tzw. major release) standardu języka C++, czyli C++17. Od dłuższego czasu, odkąd C++14 ujrzało światło dzienne, zacząłem więcej zajmować się reverse engineeringiem (w pracy) oraz (w domu) powróciłem do starego hobby, jakim jest elektronika. Przez co moje programowanie stało się mocno niszowe i sporadyczne, co pociągło za sobą mniejsze zainteresowaniem się tym co dzieje się wokół języka C++ i jego społeczności.

Czytaj dalej

C++14 is done!

Zakończył się proces standaryzacji nowej wersji języka C++ - We have C++14! O kilku nowościach i wprowadzanych zmianach jakie przynosi nowa rewizja języka napisałem w notatce “Co słychać w nadchodzącym C++14”, w wolnej chwili postaram się dodać tutaj trochę więcej informacji.

Co słychać w nadchodzącym C++14

Powolnymi, acz zdecydowanymi krokami zbliża się nowy standard języka C++ oznaczony jako C++14. Niektórzy jeszcze nie oswoili się z C++11, a biznes ciągle w epoce kamienia łupanego - C++98/03, bądź “C z klasami”. A tutaj wkrótce kolejna dawka nowości i emocji. Od czasu wejścia obecnego standardu, komitet nieźle przyspieszył, można powiedzieć, że wreszcie chce nadążać za rynkiem i potrzebami. W tym celu planuje co kilka lat wydawać wersję major i_ minor_ nowego standardu tegoż języka, docelowo co 3 lata.

Czytaj dalej

C++11/C++14 w Visual Studio 2013

Od jakiegoś czasu na msdn-ie i blogach głośno na temat nowej wersji Microsoftowego IDE, jednego z najlepszych platform do budowy aplikacji pod systemy tegoż producenta, i nie tylko, czyli Visual Studio. Od czasu jego premiery ponad miesiąc temu, gwara i dyskusje na jego temat nie ucichły, ciągle dochodzą nowe słuchy i doniesienia o kolejnych ciekawych eventach związanych z uruchomienie tej wersji, a także, co jest nowością - wersji online w chmurze na Azuresie.

Czytaj dalej

MPU: klasy cech kontenerów STL

Kolejna notatka z serii MPU, opisująca kilka ciekawych konstrukcji zawartych w mistycznym MetaPrograming-Unit. Tym razem o klasach cech opisujących typy kontenerów zawartych w STL. Każdy programista C++ zaznajomiony jest z klasami cech (traits) i ich wielkim potencjałem. Dla tych wszystkich, którzy nie do końca łapią temat, dwa zdania wprowadzające. Klasy cech w C++ są specyficznym typem klas szablonów dostarczających w czasie kompilacji informacji o innych typach bądź strukturach danych. Wykorzystywane są głownie w programowaniu generycznym, przez inne obiekty lub algorytmy do określenia polityki działania lub szczegółów implementacji i realizacji.

Czytaj dalej

MPU: uogólniony begin i end

Według obietnicy z pierwszej notki o MPU chciałbym przedstawić najczęściej używany element, który ułatwia wykorzystywanie standardowych algorytmów operujących na zakresach dla danych przechowywanych w zwykłych tablicach. Oczywiście nie ma żadnego problemu (pomijając wszelkie biblioteki), bo do tej pory tablice w łatwy sposób mogły być używane jako zakresy w dowolnej funkcji algorytmu z STL-a. Przeważnie robiło się to w prosty sposób, podając wskaźnik na początkowy i ostatni + 1 element tablicy. Tak, jak na poniższym przykładzie wypisującym zawartość tablicy:

Czytaj dalej