#C++

wszystkie notatki oznaczone etykietą "C++"

Lambda pod maską języka C++

Wprowadzone w C++11 wyrażenia i funkcje lambda umożliwiające “inlinowe” definiowanie lokalnych funkcji anonimowych były chyba jednym z najbardziej wyczekiwanych, a później docenionych, nowości dodanych w 2011 roku do języka C++. Dzisiaj raczej ciężko byłoby się bez nich obejść w codziennej pracy. Ale czy ktoś zastanawiała się jak one działają i jak zostały zaimplementowane pod maską języka i kompilatora? Sam zaciekawiony tymi elementami postanowiłem zastanowić się nad możliwymi sposobami implementacji tych konstrukcji językowych oraz zajrzeć do środka sprawdzając jak to zostało zrobione.

Czytaj dalej

Ciekawe zastosowania klas lokalnych w C++

Po odkopaniu mojego starego hacka na pseudo-lambdy sprzed ery C++11 z wykorzystaniem klas lokalnych, postanowiłem trochę głębiej pogrzebać wokół tego niezbyt popularnego i chyba mniej znanego elementu języka C++. Może ktoś wykorzystuje takie klasy i uda mi się znaleźć jakieś ciekawe zastosowania i użycia tej konstrukcji.

Lokalne klasy w roli funktorów i funkcji lambda w C++03

Natrafiłem na jakiś stary, sprzed ponad 5 lat, kod mojego autorstwa, gdzie w projekcie z różnych powodów używaliśmy starego środowiska, kompilatora lub języka w standardzie C++03. Były to już czasy grubo po premierze C++11 no i jak to bywa, człowiek zachłyśnięty nowymi elementami języka, strasznie usprawniającymi pracę, musiał sobie jakoś radzić w szarej rzeczywistości. Dla mnie takim największym problemem był brak anonimowych funkcji i wpadłem wtedy na genialną pseudo-protezę funkcji lambda, aby tylko nie trzeba było definiować zewnętrznych funktorów ;)

Czytaj dalej

Przeciążenia, specjalizacje i wyszukiwanie nazw w C++

Po ostatnim wpisie, gdzie w przedstawionych sposobach w wielu miejscach bazowałem głównie na możliwościach oferowanych przez przeciążenia funkcji i specjalizacje, dalej chciałbym poruszyć te ciekawe elementy i mechanizmy języka C++ jakimi bez wątpienia są właśnie przeciążania i specjalizacje, a także cały mechanizm wyszukiwania nazw. Ten obszar języka C++ wydaje się trochę skomplikowany, o czym może poświadczyć objętość materiału go opisującego. W dokumencie standaryzacyjnym języka C++ znajdziemy całe rozdziały o przeciążeniach (doc:cpp20:over), wyszukiwaniu nazw (doc:cpp20:basic.

Czytaj dalej

Blokowanie niejawnej konwersji w C++

W ostatnim wpisie napomknąłem coś o dawnych problemach z konstruktorami konwersji odnosząc się do mojego starego wpisu o niejawnych przekształceniach typów. Po przypomnieniu sobie jego treści postanowiłem podzielić się kilkoma, pewnie ogólnie znanymi, sztuczkami kontrolowania i blokowania niejawnych konwersji nie tylko przy typach zdefiniowanych przez użytkownika, ale też te standardowe konwersje zachodzące mimowolnie pod maską języka C++ ;) Wykluczenie metody z niejawnej konwersji (explicit) We wspomniane notce do zapobiegania niejawnych konwersji do typu użytkownika użyto specyfikatora explicit w towarzystwie konstruktora konwersji.

Czytaj dalej

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

Rust okiem programisty C++

Po rozwiązaniu AoC w Ruscie, i jako takiej 25 dniowej codziennej pracy z tym językiem, mogę wreszcie powiedzieć kilka słów na jego temat i podzielić się moimi odczuciami i uwagami, widoczynmi z perspektywyw programisty piszącego głównie w C++. [Z powodu braków czasowych wynikłych z migracją nie udało mi się jeszcze skończyć tego wpisu…]

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

WinBounce: Poruszaj oknami na ekranie Windowsa

Gdy szlajając się po Internecie przypadkiem natrafiłem na wpis Juli “Challenge: Write a bouncy window manager” zaświtała mi w głowie myśl, że w sumie to dla zabawy mógłbym zrobić coś podobnego na Windowsa. Postanowiłem wtedy, że w jakiś “Dzień Programisty”, “Prima Aprilis”, czy inny podobny “szajs” spróbuję poruszyć ten temat. Zainspirowany tym pomysłem wczorajszego 1-szego kwietnia udało mi się nadziergać trochę kodu. http://twitter.com/malcompl/status/1245406565139730433 Tak powstał prosty programik (WinBounce) wprawiający w ruch okna na ekranie.

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/