Что такое современный C ++? - PullRequest
27 голосов
/ 07 сентября 2010

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

Ответы [ 5 ]

27 голосов
/ 07 сентября 2010

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

25 голосов
/ 08 сентября 2010

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

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

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

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

Как и во всех аргументах this-vs-that, у обоих подходов есть свои достоинства. Современный C ++ не универсально лучше. Например, встроенные среды часто требуют дополнительных ограничений, которые большинству людей никогда не нужны, поэтому вы увидите много кода в старом стиле. В целом, я думаю, вы обнаружите, что большинство современных функций стоит использовать регулярно. Усовершенствования закона Мура и компилятора позволили решить большинство причин, по которым следует избегать нового.

11 голосов
/ 07 сентября 2010

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

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

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

7 голосов
/ 08 сентября 2010

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

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

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

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

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

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

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

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

3 голосов
/ 07 сентября 2010

Страница Википедии о готовящемся стандарте C ++ - неплохое начало для чтения на более новой версии C ++ .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...