Dzisiaj odkryliśmy przyczynę paskudnego błędu, który zdarzał się sporadycznie tylko na niektórych platformach. Nasz kod wyglądał następująco: class Foo { map<string,string> m; void A(const string& key) { m.erase(key); cout << "Erased: " << key; // oops } void B() { while (!m.empty()) { auto toDelete = m.begin(); A(toDelete->first); } } …
Wygląda na to, że Java ma moc deklarowania klas niepochodzących od wieków, a teraz C ++ też to ma. Jednak w świetle zasady Open / Close w SOLID, dlaczego miałoby to być przydatne? Dla mnie finalsłowo kluczowe brzmi jak friend- jest legalne, ale jeśli go używasz, najprawdopodobniej projekt jest nieprawidłowy. …
Jak widzę, inteligentne wskaźniki są szeroko stosowane w wielu rzeczywistych projektach C ++. Chociaż niektóre inteligentne wskaźniki są oczywiście korzystne dla obsługi RAII i przeniesienia własności, istnieje również tendencja do domyślnego korzystania ze wskaźników wspólnych jako sposobu „wyrzucania elementów bezużytecznych” , aby programiści nie musieli tak dużo myśleć o alokacji …
Java ma automatyczny GC, który co jakiś czas zatrzymuje świat, ale dba o śmieci na stosie. Teraz aplikacje C / C ++ nie mają tych zawieszeń STW, ich użycie pamięci również nie rośnie nieskończenie. Jak osiąga się to zachowanie? Jak zajmowane są martwe przedmioty?
Ponad 10 lat temu w szkole uczyli cię używania specyfikatorów wyjątków. Ponieważ moje doświadczenie jest jednym z nich, programiści Torvaldish C, którzy uparcie unikają C ++, chyba że są do tego zmuszeni, trafiam tylko do C ++ sporadycznie, a kiedy to robię, nadal używam specyfikatorów wyjątków, ponieważ tego się nauczono. …
W tym artykule Przepełnienie stosu wymieniono dość kompleksową listę sytuacji, w których specyfikacja języka C / C ++ deklaruje, że jest „niezdefiniowanym zachowaniem”. Chcę jednak zrozumieć, dlaczego inne współczesne języki, takie jak C # lub Java, nie mają pojęcia „niezdefiniowane zachowanie”. Czy to oznacza, że projektant kompilatora może kontrolować wszystkie …
Próbowałem wymyślić sposób na zadeklarowanie silnie typowanych typów maszynopisów, aby złapać pewną klasę błędów na etapie kompilacji. Często zdarza się, że wpisuję int w kilku typach id lub wektorze do pozycji lub prędkości: typedef int EntityID; typedef int ModelID; typedef Vector3 Position; typedef Vector3 Velocity; Może to uczynić cel kodu …
Istnieje wiele przydatnych funkcji <algorithm>, ale wszystkie działają na „sekwencjach” - parach iteratorów. Na przykład, jeśli mam kontener i lubię na nim biegać std::accumulate, muszę napisać: std::vector<int> myContainer = ...; int sum = std::accumulate(myContainer.begin(), myContainer.end(), 0); Gdy wszystko, co zamierzam zrobić, to: int sum = std::accumulate(myContainer, 0); Co jest w …
Ten blog został opublikowany w Hacker News z kilkoma pozytywnymi opiniami. Pochodząc z C ++, większość tych przykładów wydaje się sprzeczna z tym, czego mnie nauczono. Tak jak w przykładzie 2: Zły: def check_for_overheating(system_monitor) if system_monitor.temperature > 100 system_monitor.sound_alarms end end kontra dobry: system_monitor.check_for_overheating class SystemMonitor def check_for_overheating if temperature …
Chciałbym zwrócić uwagę na twoje doświadczenia z pełnymi skalami IDE w Linuksie. Ja osobiście pracuję głównie z vim, jednak inni programiści chcieliby zobaczyć prawdziwe IDE. Chciałbym więc poznać Twoją osobistą opinię na temat różnych IDE i ich porównania w następującym kontekście: C ++ i może trochę rozwoju C (nie Java, …
Założenia Jedną z zalet bibliotek tylko nagłówkowych dla C ++ jest to, że nie trzeba ich oddzielnie kompilować. W C i C ++ inlinema sens tylko wtedy, gdy funkcja jest zdefiniowana w pliku nagłówkowym *. Tradycyjnie w C używany jest układ .c / .h, w którym nagłówek reprezentuje minimalny publiczny …
Wierzyłem, że wielokrotnie szukałem wirtualnych destruktorów, większość wspomina o celu wirtualnych destruktorów i dlaczego potrzebujesz wirtualnych destruktorów. Myślę też, że w większości przypadków destruktory muszą być wirtualne. Zatem pytanie brzmi: dlaczego c ++ domyślnie nie ustawia wirtualnych wszystkich destruktorów? lub w innych pytaniach: Kiedy NIE muszę używać wirtualnych niszczycieli? W …
Stroustrup twierdzi, że Cfront, pierwszy kompilator C ++, został napisany w C ++ ( FAQ Stroustrup ). Ale jak to możliwe, że pierwszy kompilator C ++ zostanie napisany w C ++? Kod, który składa się na kompilator, również musi zostać skompilowany, a zatem pierwszy kompilator C ++ nie mógł zostać …
Wczoraj miałem straszne doświadczenie w wywiadzie. Ankieter zapytał mnie o czystą funkcję wirtualną. Powiedziałem: Może lub nie może mieć definicji w klasie bazowej, ale klasy pochodne powinny zapewniać definicję, chyba że chcą także być klasą abstrakcyjną. Ale ankieter ciągle pytał: „Czy czysty wirtualny może mieć definicję !!! ???” ... Powiedziałem …
Jestem programistą C, C ++. Jestem zainteresowany rozwojem mobilnym. Chcę wiedzieć, jak mogę tworzyć aplikacje na Androida przy użyciu C i C ++, przeczytałem , że dostarczają one zestaw dla programistów C, C ++, ale nie ma on wszystkich funkcji jak w przypadku zestawu Java. Czy powinienem wybrać zestaw programistyczny …
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.