Standard C11 wydaje się sugerować, że instrukcje iteracji ze stałymi wyrażeniami kontrolującymi nie powinny być optymalizowane. Czerpię radę z tej odpowiedzi , która konkretnie cytuje sekcję 6.8.5 projektu standardu: Instrukcja iteracji, której wyrażenie kontrolne nie jest wyrażeniem stałym ... może zostać przyjęte przez implementację jako zakończona. W tej odpowiedzi wspomniano, …
Miałem wrażenie, że dostęp do unionczłonka innego niż ostatni zestaw to UB, ale nie mogę znaleźć solidnego odniesienia (poza odpowiedziami twierdzącymi, że to UB, ale bez żadnego wsparcia ze strony standardu). Czy jest to więc niezdefiniowane zachowanie?
Z jakiegoś powodu podkradałem się do źródła .NET Framework dla tej klasy Doublei odkryłem, że deklaracja ==to: public static bool operator ==(Double left, Double right) { return left == right; } Ta sama logika obowiązuje dla każdego operatora. Jaki jest sens takiej definicji? Jak to działa? Dlaczego nie tworzy nieskończonej …
vector<int> v; v.push_back(1); v.push_back(v[0]); Jeśli drugie push_back spowoduje realokację, odwołanie do pierwszej liczby całkowitej w wektorze nie będzie już ważne. Więc to nie jest bezpieczne? vector<int> v; v.push_back(1); v.reserve(v.size() + 1); v.push_back(v[0]); Czy to jest bezpieczne?
auto foo = "You're using g++!"; auto compiler_detector = [foo](auto foo) { std::puts(foo); }; compiler_detector("You're using clang++!"); clang ++ 3.6.0 i nowsze wydrukuj "Używasz clang ++!" i ostrzegaj o niewykorzystaniu przechwytywania foo . g ++ 4.9.0 i nowsze wydrukuj "Używasz g ++!" i ostrzec o nieużywanym parametrze foo . Który …
Rozważ ten dość bezużyteczny program: #include <iostream> int main(int argc, char* argv[]) { int a = 5; auto it = [&](auto self) { return [&](auto b) { std::cout << (a + b) << std::endl; return self(self); }; }; it(it)(4)(6)(42)(77)(999); } Zasadniczo próbujemy utworzyć lambdę, która sama się zwraca. MSVC kompiluje …
Mam sytuację, w której chciałbym, aby dwa przypadki w instrukcji przełącznika C ++ przechodziły do trzeciego przypadku. W szczególności druga sprawa przechodziłaby do trzeciej sprawy, a pierwsza sprawa również przechodziłaby do trzeciej sprawy bez przechodzenia przez drugą sprawę. Miałem głupi pomysł, wypróbowałem go i zadziałało! I owinięty drugi przypadek w …
Obecnie uczę się C ++ z książką C ++ Primer, a jedno z ćwiczeń w książce to: Wyjaśnij, co robi to wyrażenie: someValue ? ++x, ++y : --x, --y Co wiemy? Wiemy, że operator trójskładnikowy ma wyższy priorytet niż operator przecinka. W przypadku operatorów binarnych było to dość łatwe do …
Jako ciekawa kontynuacja (choć nie ma to dużego znaczenia praktycznego) mojego poprzedniego pytania: Dlaczego C ++ pozwala nam umieszczać nazwę zmiennej w nawiasach podczas deklarowania zmiennej? Dowiedziałem się, że połączenie deklaracji w nawiasach z właściwością wstrzykniętej nazwy klasy może prowadzić do zaskakujących wyników w zachowaniu kompilatora. Spójrz na następujący program: …
C jest w pewnym sensie, nie do końca, podzbiorem C ++. Więc możemy używać większości funkcji / nagłówków C w C ++, zmieniając nieco nazwę ( stdio.hna cstdio, stdlib.hna cstdlib). Moje pytanie jest właściwie semantyczne. W kodzie C ++ (przy użyciu najnowszej wersji kompilatora GCC) mogę wywołać printf("Hello world!");i std::printf("Hello …
Czy ktoś może podać jasną definicję wraz z prostym przykładem wyjaśniającym, czym jest „piekło zwrotne” dla kogoś, kto nie zna JavaScript i node.js? Kiedy (w jakich ustawieniach) pojawia się „problem z piekłem zwrotnym”? Dlaczego tak się dzieje? Czy „piekło zwrotne” jest zawsze związane z obliczeniami asynchronicznymi? A może „piekło zwrotne” …
Jednak nieco dziwne pytanie, jeśli dobrze pamiętam, kod źródłowy C ++ nie wymaga systemu plików do przechowywania plików. Posiadanie kompilatora, który skanuje odręczne dokumenty za pomocą aparatu, byłoby zgodną implementacją. Chociaż praktycznie nie ma to większego sensu. Jednak C ++ 20 dodaje teraz lokalizację źródłową z file_name. Czy to teraz …
Do tej pory uważałem, że ostatecznie ostateczne i ostateczne są mniej więcej równoważne i że JLS potraktuje je podobnie, jeśli nie identyczne w rzeczywistym zachowaniu. Potem znalazłem ten wymyślony scenariusz: final int a = 97; System.out.println(true ? a : 'c'); // outputs a // versus int a = 97; System.out.println(true …
(Szukam przykładu lub dwóch, aby to udowodnić, a nie listy). Czy kiedykolwiek zdarzyło się, że zmiana w standardzie C ++ (np. Z 98 na 11, 11 na 14 itd.) Zmieniła zachowanie istniejącego, dobrze sformułowanego kodu użytkownika o zdefiniowanym zachowaniu - po cichu? tj. bez ostrzeżenia lub błędów podczas kompilacji z …
Używamy plików cookie i innych technologii śledzenia w celu poprawy komfortu przeglądania naszej witryny, aby wyświetlać spersonalizowane treści i ukierunkowane reklamy, analizować ruch w naszej witrynie, i zrozumieć, skąd pochodzą nasi goście.
Kontynuując, wyrażasz zgodę na korzystanie z plików cookie i innych technologii śledzenia oraz potwierdzasz, że masz co najmniej 16 lat lub zgodę rodzica lub opiekuna.