Что может C ++ сделать, что слишком сложно или грязно на любом другом языке? - PullRequest
28 голосов
/ 08 января 2009

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

Меня особенно интересуют аспекты C ++, которые мало известны или недостаточно используются.

Редактировать: Люди, пожалуйста, по крайней мере кратко прочитайте другие ответы, чтобы убедиться, что вы не дублируете то, что уже было сказано, если вы согласны с тем, что сказал кто-то другой, проголосуйте! 1007 *

Ответы [ 16 ]

5 голосов
/ 08 января 2009

C # и Java вынуждают вас поместить функцию 'main ()' в класс. Я нахожу это странным, потому что это разбавляет значение класса.

Для меня класс - это категория объектов в вашей проблемной области. Программа не такой объект. Поэтому в вашей программе никогда не должно быть класса «Program». Это было бы эквивалентно математическому доказательству, использующему символ для обозначения себя - доказательство - рядом с символами, представляющими математические объекты. Это будет просто странно и непоследовательно.

К счастью, в отличие от C # и Java, C ++ поддерживает глобальные функции. Это позволяет вашей функции main () существовать снаружи. Поэтому C ++ предлагает более простую, более согласованную и, возможно, более правдивую реализацию объектно-ориентированной идиомы. Следовательно, C ++ может сделать это одно, а C # и Java - нет.

5 голосов
/ 08 января 2009

Технически, я думаю, что нет, правда!

Честно говоря, я не думаю, что C ++ может что-то сделать, чего не может Язык D . Независимо от того, какие способности есть у C ++, они всегда сложнее и сложнее, чем D или любой другой язык. Даже простая вещь, такая как объявление класса, в C ++ намного сложнее и сложнее, чем в любом другом языке.

Единственное, что может сделать C ++, - это быть совместимым с миллионами строк кода, уже написанных на C ++.
Это единственное, что не может сделать ни один язык, кроме C ++:)

3 голосов
/ 08 января 2009

Я думаю, что перегрузка операторов - довольно приятная особенность. Конечно, этим можно злоупотреблять (как в Boost lambda).

2 голосов
/ 09 января 2009

C ++ обеспечивает полный контроль над памятью и, как результат, делает процесс выполнения программы намного более предсказуемым. Вы можете не только точно сказать, в какое время происходит выделение и освобождение памяти, вы можете определить свои собственные кучи, иметь несколько куч для различных целей и точно сказать, где в памяти выделяются данные. Это часто полезно при программировании на встроенные системы / системы реального времени, такие как игровые приставки, мобильные телефоны, mp3-плееры и т. Д., Которые:

  1. имеют строгие верхние пределы памяти, которые легко доступны (по сравнению с ПК, который становится все медленнее, когда у вас заканчивается физическая память)
  2. часто имеют неоднородную структуру памяти. Вы можете разместить объекты одного типа в одном фрагменте физической памяти, а объекты другого типа - в другом.
  3. имеют ограничения программирования в реальном времени. Неожиданный вызов сборщика мусора в неподходящее время может привести к катастрофическим последствиям.

AFAIK, C и C ++ - единственный разумный вариант для такого рода действий.

2 голосов
/ 08 января 2009

Жесткий контроль над системными ресурсами (особенно памятью), предлагая при этом мощные механизмы абстракции. Единственный язык, который я знаю, который может приблизиться к C ++ в этом отношении, это Ада.

0 голосов
/ 08 января 2009

Ну, если честно, вы можете делать что угодно, если хотите написать достаточно кода.

Итак, чтобы ответить на ваш вопрос, нет, вы ничего не можете сделать на другом языке, чего не может сделать C ++. Сколько у вас терпения, и готовы ли вы посвятить долгие бессонные ночи, чтобы заставить его работать?

Есть вещи, которые оболочки C ++ упрощают (потому что они могут читать файлы заголовков), например, разработка Office. Но опять же, это потому, что кто-то написал много кода, чтобы «обернуть» его для вас в RCW или «Runtime Callable Wrapper»

РЕДАКТИРОВАТЬ: Вы также понимаете, что это загруженный вопрос.

...