Иногда я читал дискуссию о том, почему С++ хорош или плох, и иногда один из аргументов ссылается на то, что современный С++ сильно отличается от старого С++. Мне интересно, какая разница? Что было бы примером "Современного" С++ и что было бы примером (желательно сделать то же самое) этого "старого" С++?
Что такое современный С++?
Ответ 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, который так долго издевался над нами и пытается освободить наших пользователей от него (определяя интерфейсы, которые этого не позволяют). Мы также принимаем тот факт, что другие были раньше, и что повторное использование существующих библиотек НЕ является признаком слабости.
Ответ 5
Страница страница Википедии на предстоящем стандарте С++ не является плохим началом для чтения на новом С++.