Подтвердить что ты не робот

Что такое современный С++?

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

4b9b3361

Ответ 1

Широкое использование стандартной библиотеки и STL, исключений и шаблонов - а не просто C с классами

Ответ 2

"Современный" С++ не боится использовать любое или все из следующего:

  • RAII
  • контейнеры и алгоритмы стандартной библиотеки
  • Шаблоны
  • метапрограммированием
  • исключения
  • Повышение

"Старый" С++ имеет тенденцию избегать этих вещей из-за предполагаемого отсутствия поддержки компилятора или производительности во время выполнения. Вместо этого вы найдете...

  • много new и delete
  • Связанные с вами списки и другие структуры данных
  • коды возврата как механизм обработки ошибок
  • один из миллионов пользовательских классов строк, которые не являются std::string

Как и во всех этих аргументах -ss, есть достоинства для обоих подходов. Современный С++ не всегда лучше. Например, встраиваемые среды часто требуют дополнительных ограничений, которые большинство людей никогда не нуждаются, поэтому вы увидите там много кода старого стиля. В целом, хотя, думаю, вы обнаружите, что большинство современных функций стоит использовать регулярно. Moore Law и улучшения компилятора позаботились о большинстве причин, чтобы избежать новых вещей.

Ответ 3

Одно очень очевидное различие заключается в том, что в "старом стиле" С++ вы увидите много объектов, созданных вручную с помощью new и уничтоженных с помощью delete. В современном С++ объект создается в стеке, когда это возможно, или, по крайней мере, завернутый в какой-то умный указатель.

Другое отличие состоит в том, что старый стиль С++ больше ориентирован на ООП, в то время как современный С++ использует сочетание стилей программирования: процедурный, модульный, объектный и общий. Свободные функции считаются хорошей вещью в современном С++, в то время как они были бы переброшены в некоторый класс в старом стиле С++.

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

Ответ 4

В С++ существуют различные вещи, которые считаются современными.

Прежде всего, я думаю, это необычное появление шаблонов. Не только сам STL, но и менее "регулярное" использование шаблонов, которые привели к разработке метапрограмм шаблонов. Обратите внимание, например, на наличие enable_if в следующей версии стандарта.

Это самый замечательный признак, который я думаю о движении среди программистов на С++, которые стремятся обеспечить правильность при построении:

  • предпочитает ошибки компилятора для ошибок времени выполнения > шаблоны/тип безопасности вместо эллипсиса /void*
  • использовать ограниченное областью управление ресурсами (также RAII, но чуть более явным)

Это исследование для высокого качества также привело к повсеместному использованию:

  • STL (алгоритмы и структуры данных, которые были тщательно протестированы, хотя STL, к сожалению, довольно небезопасно)
  • библиотеки Boost (просмотрены экспертами-программистами, без ошибок, очень портативны)

Рассмотрение этих библиотек также показывает, что программисты на C++ больше не обладают сложностью неполноценности по отношению к этим OO-языкам: теперь, освобожденные от этого комплекса, мы не стесняемся смешивать различные парадигмы (OO, generic, процедурные) для достижения нашей цели.

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