В настоящее время C ++ развивается очень быстро, и это хорошо для C ++. После C ++ 14 у нас теперь есть предложения по C ++ 17 и новому C ++ каждые три года. Обратите внимание на C ++ 20. Итак, куда идет язык?
Когда-то давно С ++ был языком, которым пользовались большие дети, в то время как остальная часть сообщества программистов смотрела на него с трепетом и продолжала использовать языки, которые можно было рассматривать или отвергать, считая их языками «сценариев» для детей-сценаристов. . Однако по сравнению с хорошо спроектированными или разработанными с нуля языками, такими как C #, было ясно, что не все было правильно в лагере C ++.
Большая проблема C ++ заключается в том, что это объектно-ориентированный язык, созданный на основе машинно-независимого, подобного ассемблеру языка, то есть C.
Вы должны передать это Бьярну Страуструпу за отличную работу. Пока вы сохраняете простоту, C ++ — это хороший и достаточно современный объектно-ориентированный язык, который все еще достаточно близок к машинной архитектуре, чтобы создавать программы, которые выполняются с максимально возможной скоростью. Это причина того, что программы на C ++ часто называют «нативным» или «нативным кодом».
Ключевым моментом в продвижении C ++ является то, что новые функции должны быть введены таким образом, чтобы они не нарушали существующие программы. Это привело к неидеальному развитию языка, и часто существует несколько способов достижения одного и того же результата. Когда это происходит, программисту приходится прибегать к советам о том, что является «лучшей практикой», и не всегда существует консенсус по этой теме.
Многие из новых возможностей C ++ 14 были связаны с шаблонами, общим программированием и выводом типов — модными темами. Однако, если вы действительно хотите их использовать, вы столкнетесь с некоторыми, казалось бы, сложными идеями. Несколько знакомых мне программистов на C ++ признались, что на самом деле не следят за деталями новых функций и, следовательно, избегают их использования, за исключением очень простых ситуаций — а желательно вообще.
Это означает, что есть много программистов на C ++, новичков и среднего уровня, которым будет сложно понять, что это за новые функции и как их можно использовать. Эксперты будут превозносить достоинства нового, но большинство будет озадачено. Это странная ситуация, в основном из-за того, что C ++ становится все более функциональным.
Немного возврата к своим корням C — это новый вариантный тип. По сути, это объединение, модифицированное для обеспечения безопасности типов. Другими словами, вариант может содержать любой из типов, для которых он объявлен, но он имеет только один тип в любой момент времени, и если вы попытаетесь использовать значение как другой тип, он вызовет исключение. Приведенный пример:
вариант
v = 12;
int я = получить
ш = получить
пытаться {
получить
}
catch (bad_variant_access &) {}
Хорошо, хорошо, но по моему опыту союзы обычно используются, когда у вас есть битовый шаблон, который может представлять два или даже больше типов данных, и в таком случае я не хочу безопасности типов.
Также новым является if constantexpr, который оценивается во время компиляции и предоставляет способ выбора того, что вы хотите видеть в своем коде. Он разработан, чтобы сделать шаблоны более гибкими и эффективными. Еще одно дополнение к шаблону — использование auto. Теперь вы можете разрешить вывод типа переменной в шаблоне. Проблема заключается в соблюдении правил вывода типа.
Более приземленное изменение связано с назначением кортежей различным переменным:
авто [а, б, в] = получить значения ();
и теперь вы можете объявлять переменные в if. Это обобщение объявления переменных в for, но на самом деле это синтаксический сахар по сравнению с областью видимости блока C ++. Например, вы можете написать:
if (int x = 42; истина! = ложь) {}
Теперь это действительно поразит любого новичка, которого уже смущают == и =. Я не уверен, что это стоит небольшого преимущества из-за огромной потери простоты — никогда не используйте = в if.
C ++ — это язык мастеров, и теперь, когда они контролируют направление, в котором он будет двигаться в будущем, нам нужно беспокоиться. Что еще хуже, так это то, что разработчики стандартов практически не пытаются представить упрощенный случай «ворчливым» программистам здесь, на земле. Если вы не следуете формальному представлению спецификации, тогда жестко, вы даже не участвуете в этом. Есть несколько человек, например Херб Саттер, которые пытаются сделать вещи понятными, но этого недостаточно.
Для большинства программистов случится C ++ 17, и им придется с ним справиться.