C++ as a high-level language?

Refresh

November 2018

Views

2.6k time

17

I learned C++ for the first time years ago by reading Stroustrup's "The C++ Programming Language" for two times and participating for a year in quite a big project (though the level of c++ team was quite low). The C++ from the Founder's book was really a huge extension of good old C. Powerfull and object-oriented and even generic, but still - extension. And, yes, there was as STL somehow added to the language by standard, that was just there by some hidden reasons - whether you are going to use it or not. So, at that days I got not much of a good impression of C++: in addition to all these eternal C problems with memory, pointers and arrays' bounds there were a lot of new added: with classes and templates and complicated syntax and a lot of thinking to sort it out.

Now, after a years of keeping away from C++, I've started recently to refresh my knoweledge, but now I beagan with "Accelerated C++" by Andrew Koenig and Barbara E. Moo. And what I'm seeing there is absolutely "another C++"! Following this book, you can in fact use C++ almost without knowing its C-core: you can never use arrays, since you have vectors, you can forget about char*, since you have string, etc., etc. From this point of view, STL is really the heart of the language and the language itself appears to be a very "high level" one, but with performance and control over entities which neither Java, nor Python could ever afford.

So, what C++ do YOU use in you practice? Do you mix the styles, say, arrays and vectors? Are there any rules or best practices here?...

UPDATE:

I was told in comments that the thing I'm talking about is what's now called "Modern C++". Searching by this words brings out the following really interesting threads:

Is modern C++ becoming more prevalent?

What is Modern C++?

Examples of "modern C++" in action?

7 answers

4

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

6

Поздравляем, вы обнаружили, что мы называем «Modern C ++». Я бы предпочел в любой день над «С с классами» стилей программирования. Нет больше сырые указатели, не более явные удаления и т.д. Прекрасный мир!

3

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

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

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

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

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

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

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

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

3

Koenig и мычать ускорилось C ++ очень хорошая книга, и один, что я рекомендую.

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

Важно, что вы понимаете, как.

0

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

-7

В качестве альтернативного ответа, я соблазн сказать, лучшая практика использования C ++ это не так.

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

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

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

4

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

И, кстати, библиотеки Повышения являются огромным дополнением к STL.