C ++ как язык высокого уровня? - PullRequest
17 голосов
/ 07 декабря 2010

Я впервые выучил C ++, дважды прочитав «Язык программирования C ++» Страуструпа и целый год участвуя в довольно большом проекте (хотя уровень команды c ++ был довольно низким). C ++ из книги Основателя был действительно большим расширением старого доброго C. Мощного, объектно-ориентированного и даже общего, но все же - расширения. И да, STL каким-то образом был добавлен к языку стандартным образом, и это было просто по каким-то скрытым причинам - собираетесь ли вы его использовать или нет. Итак, в те дни у меня не сложилось хорошего впечатления от C ++: помимо всех этих вечных проблем с C, связанных с памятью, указателями и границами массивов, появилось много нового: классы и шаблоны, сложный синтаксис и многое другое. думать, чтобы разобраться.

Теперь, после многих лет отказа от C ++, я недавно начал обновлять свои знания, но теперь я начинаю с "Ускоренного C ++" Эндрю Кенига и Барбары Э. Му. И то, что я вижу, это абсолютно "еще один C ++"! Следуя этой книге, вы можете фактически использовать C ++ почти не зная его C-core: вы никогда не сможете использовать массивы, поскольку у вас есть векторы, вы можете забыть о char *, так как у вас есть строка и т. Д. И т. Д. С этого момента с точки зрения, STL действительно является сердцем языка, и сам язык кажется очень «высокоуровневым», но с производительностью и контролем над объектами, которые ни Java, ни Python никогда не могли себе позволить.

Итак, какой C ++ ВЫ используете в своей практике? Вы смешиваете стили, скажем, массивы и векторы? Есть ли здесь какие-либо правила или лучшие практики? ...

UPDATE:

Мне сказали в комментариях, что я говорю о том, что сейчас называется "Современный C ++". Поиск по этим словам выявляет следующие действительно интересные темы:

Современный C ++ становится все более распространенным?

Что такое Modern C ++?

Примеры "современного C ++" в действии?

Ответы [ 7 ]

7 голосов
/ 07 декабря 2010

Поздравляем, вы открыли для себя то, что мы называем "Современный C ++".Я бы предпочел это когда-нибудь стилю программирования "C с классами".Нет больше необработанных указателей, больше нет явных удалений и т. Д. Чудесный мир!

4 голосов
/ 08 декабря 2010

Итак, какой C ++ ВЫ используете в своей практике?Вы смешиваете стили, скажем, массивы и векторы?Есть ли здесь какие-либо правила или лучшие практики? ...

Современный C ++, определенно.Но, по моему мнению, это не исключает массивов.Есть еще случаи, когда массивы предпочтительнее векторов.Но когда я использую массивы, я использую их в стиле STL.Я использую указатели в качестве итераторов, и я применяю алгоритмы STL к содержимому массива и т. Д.

Кстати, сам Бьярн Страуструп был процитирован для описания C ++ очень похожим на то, что описывал сам:

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

Конечно, существуют ограничения.С современным C ++ время компиляции, как правило, страдает.И это требует гораздо более продвинутых компиляторов, что на некоторых платформах делает его бездействующим.И многие более консервативные ведущие разработчики или руководители проектов, или просто древние базы кода, иногда означают, что это тоже не вариант.И есть определенная кривая обучения, потому что все подводные камни C все еще существуют, вам просто нужно научиться обходить их (например, утечки памяти не просто vanish , современный C ++ просто определяет некоторыеочень мощные шаблоны, чтобы их избежать).

Но я думаю, что современный C ++ действительно можно считать красивым языком.И это определенно не то, как вы бы описали традиционный стиль C ++ с классами.

Когда я работаю на (других) языках высокого уровня, я обнаружил, что почти всегда есть что-то, из чего я скучаюC ++.Либо в языке отсутствуют надежные и безопасные с точки зрения типов контейнеры, либо выразительные итераторы / алгоритмы, либо в нем отсутствует поддержка RAII, либо нет способа выразить универсальные алгоритмы, как вы можете с помощью шаблонов.

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

4 голосов
/ 07 декабря 2010

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

4 голосов
/ 07 декабря 2010

Общая типизация и шаблонное метапрограммирование. Я не использую полиморфизм так часто, потому что он слишком замкнут.

И, кстати, библиотеки Boost являются отличным дополнением к STL.

3 голосов
/ 07 декабря 2010

Accelerated C ++ Кенига и Му - очень хорошая книга, и я рекомендую ее.

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

Важно, чтобы вы понимали оба.

0 голосов
/ 07 декабря 2010

Определенно смешанный стиль. Кажется глупым ограничивать себя без необходимости, особенно с таким большим количеством опций.

0 голосов
/ 07 декабря 2010

Как альтернативный ответ, я испытываю желание сказать, что лучшая практика для использования C ++ - нет.

Если вы только Windows, и .Net не слишком большой, то C # - отличный выбор. В Unix Java великолепна.

Конечно, C ++ имеет свое место. Это просто меньшее место, чем было в моем мире.

Редактировать: у меня более тридцати лет опыта программирования. 5 лет на ассемблере, 17 лет на C, 5 лет на C ++, 3 года на Java, а теперь 2 года на C #. Я очень хорош во всем этом. Ассемблер это здорово. Я быстро программирую с этим. Но я предпочитаю С, чем Ассемблер. Точно так же я предпочитаю C # по сравнению с C ++. Я считаю, что в C # гораздо проще создавать наиболее распространенные приложения, чем в C ++

.
...