Вопросы с тегом «c++»

57
Удобочитаемость в сравнении с ремонтопригодностью, особый случай написания вызовов вложенных функций

Мой стиль кодирования для вызовов вложенных функций следующий: var result_h1 = H1(b1); var result_h2 = H2(b2); var result_g1 = G1(result_h1, result_h2); var result_g2 = G2(c1); var a = F(result_g1, result_g2); Недавно я перешел в отдел, где очень популярен следующий стиль кодирования: var a =...

57
Почему в C ++ нет конструкции finally?

Обработка исключений в C ++ ограничена попыткой / throw / catch. В отличие от Object Pascal, Java, C # и Python, даже в C ++ 11 finallyконструкция не была реализована. Я видел очень много литературы по С ++, обсуждающей «код, исключающий исключение». Липпман пишет, что безопасный код исключений -...

56
Почему так много строковых классов перед лицом std :: string?

Мне кажется, что многие большие библиотеки C ++ создают свои собственные строковые типы. В коде клиента вы должны либо использовать один из библиотеки ( QString, CString, и fbstringт.д., я уверен , что кто - нибудь может назвать несколько) или сохранить преобразование между стандартным типом и одна...

56
Что такое лямбда и почему она полезна? [закрыто]

До сих пор я слышал о: Лямбда-исчисление Лямбда-программирование Лямбда-выражения Лямбда-функции Что, похоже, связано с функциональным программированием ... По всей видимости, он будет интегрирован в C ++ 1x, поэтому я мог бы лучше понять это сейчас:...

55
Почему у нас есть постфиксный прирост?

Отказ от ответственности : я прекрасно знаю семантику приращения префикса и постфикса. Поэтому, пожалуйста, не объясните мне, как они работают. Читая вопросы о переполнении стека, я не могу не заметить, что программисты путаются с оператором приращения postfix снова и снова. Отсюда вытекает...

54
Почему ключевое слово 'final' будет полезным?

Кажется, что Java обладает способностью объявлять классы, которые не могут быть извлечены целую вечность, и теперь C ++ имеет это тоже. Однако, в свете принципа открытия / закрытия в SOLID, почему это было бы полезно? Для меня finalключевое слово звучит так же, как friendэто - это законно, но если...

54
Функция случайно делает недействительным ссылочный параметр - что пошло не так?

Сегодня мы узнали причину неприятной ошибки, которая периодически возникала только на определенных платформах. Сложив наш код выглядел так: class Foo { map<string,string> m; void A(const string& key) { m.erase(key); cout << "Erased: " << key; // oops } void B() { while...

52
Почему умные указатели подсчета ссылок так популярны?

Как я вижу, умные указатели широко используются во многих реальных проектах C ++. Хотя некоторые интеллектуальные указатели, очевидно, полезны для поддержки RAII и передачи прав собственности, также существует тенденция использования общих указателей по умолчанию в качестве способа «сборки мусора»...

51
Что происходит с мусором в C ++?

У Java есть автоматический сборщик мусора, который время от времени останавливает мир, но заботится о мусоре в куче. Теперь приложения на C / C ++ не имеют таких зависаний STW, их использование памяти также не увеличивается бесконечно. Как достигается это поведение? Как ухаживать за мертвыми...

50
Почему спецификации исключений плохие?

В школе более 10 лет назад они учили вас использовать спецификаторы исключений. Так как мой фон, как один из них Torvaldish Программисты, которые упорно избегает C ++, если не принуждал, я только в конечном итоге в C ++ спорадически, и когда я делаю, я до сих пор используют исключения...

50
Почему C ++ имеет «неопределенное поведение» (UB), а другие языки, такие как C # или Java, не имеют?

В этом посте с переполнением стека приведен довольно полный список ситуаций, в которых спецификация языка C / C ++ объявляется как «неопределенное поведение». Однако я хочу понять, почему в других современных языках, таких как C # или Java, нет понятия «неопределенное поведение». Означает ли это,...

50
C ++ строго типизированный typedef

Я пытался придумать способ объявления строго типизированных typedefs, чтобы поймать определенный класс ошибок на этапе компиляции. Часто бывает, что я буду вводить int для нескольких типов идентификаторов или вектора для положения или скорости: typedef int EntityID; typedef int ModelID; typedef...

49
Объяснение того, как «говори, не спрашивай» считается хорошим ОО

Этот пост был опубликован на Hacker News с несколькими отзывами. Исходя из C ++, большинство этих примеров, кажется, идут вразрез с тем, чему меня учили. Например, пример № 2: Плохо: def check_for_overheating(system_monitor) if system_monitor.temperature > 100 system_monitor.sound_alarms end end...

49
Почему все функции <алгоритма> принимают только диапазоны, а не контейнеры?

Есть много полезных функций <algorithm>, но все они работают с «последовательностями» - парами итераторов. Например, если у меня есть контейнер и мне нравится работать std::accumulateна нем, мне нужно написать: std::vector<int> myContainer = ...; int sum =...

49
Сравнение IDE для разработки на C ++ и C под Linux: KDevelop, Eclipse, NetBeans, CodeBlocks и Anjuta [закрыто]

Я хотел бы отметить ваш опыт полномасштабных IDE в Linux. Я лично работаю в основном с vim, однако другие программисты хотели бы видеть настоящую IDE. Поэтому я хотел бы услышать ваше личное мнение о различных IDE и сравнение между ними в следующем контексте: C ++ и, возможно, некоторая разработка...

49
Являются ли библиотеки только для заголовков более эффективными?

Предположения Одним из преимуществ библиотек только для заголовков для C ++ является то, что их не нужно компилировать отдельно. В C и C ++ inlineимеет смысл только если функция определена в заголовочном файле *. Традиционно в C использовался макет .c / .h, где заголовок представляет минимальный...

48
Когда НЕ использовать виртуальные деструкторы?

Я полагал, что много раз искал о виртуальных деструкторах, большинство упоминало назначение виртуальных деструкторов и почему вам нужны виртуальные деструкторы. Также я думаю, что в большинстве случаев деструкторы должны быть виртуальными. Тогда возникает вопрос: почему с ++ не устанавливает все...

48
Что я могу сделать, если интервьюер не знает ответа на свой вопрос? [закрыто]

Вчера у меня был ужасный опыт в интервью. Интервьюер спросил меня о чисто виртуальной функции. Я сказал: он может иметь или не иметь определение в базовом классе, но производные классы должны предоставлять определение, если они также не хотят быть абстрактным классом. Но интервьюер продолжал...

48
Как мог первый компилятор C ++ быть написан на C ++?

Страуструп утверждает, что Cfront, первый компилятор C ++, был написан на C ++ ( Stroustrup FAQ ). Однако как вообще возможно, чтобы первый компилятор C ++ был написан на C ++? Код, составляющий компилятор, тоже должен быть скомпилирован, и поэтому первый компилятор C ++ не мог быть написан на C...

47
Как должен быть организован код модульного теста C ++ для максимальной эффективности модульного теста?

Этот вопрос не о модульном тестировании. Этот вопрос не о написании модульных тестов. Этот вопрос о том, куда поместить написанный код UT и как / когда / где его компилировать и запускать. В работе эффективно с унаследованным кодом , Майкл Перья утверждает , что хорошие юнит-тесты ... беги быстро...