Затем, чтобы можно было производить вычисления в compile-time и затем использовать их контексте, где требуется константа. Например, при объявлении C-шных массивов. Или параметризации шаблонов скалярами. Скажем:
Я бы еще добавил, что при помощи constexpr можно делать переносимые и читаемые генераторы масок для выравнивания указателей/размеров у буфферов данных в том же реал-тайм сегменте. При этом сохраняя и читаемость, и zero-cost, и краткость, и переносимость на разные аппаратные платформы. Но только консерваторы не способны понять нужность той или иной фичи - «не надо! это новомодный хлам»
раз уж его добавили и им пользуются, то кому-то он был сильно нужен
стандарты пишутся не потому, что какому-то васе захотелось вдруг какую-то фичу. а потому, что есть реальная насущная необходимость. в этом и проблема бешеного принтера.
маски всегда задавались константами. и с этим не было никаких проблем. ни с переносимостью, ни с читабельностью. вот дофига лет с этим работала и никогда не было проблем. даже на микроконтроллерах. так что можно натягивать сову на глобус, но это не обоснование.
Не, ну С понятно зачем — затем, что процессорных архитектур больше одной. Его поэтому и называют «переносимый ассемблер».
А вот без крестов при наличии сишечки обойтись в принципе можно... если не интересует производительность труда программиста и читаемость/сопровождаемость полученных портянок :)
читабельность и на сишечке можно обеспечить. вполне себе красивый код в кернеле. никто не жалуется. в большинстве случаев даже комментарии не нужны. при грамотном аккуратном коде он легко читается. а сделать нечитабельную фигню на плюсах гораздо проще, чем на сишечке, если уж говорить о синтаксисе :)
может, так у нас дальше пойдёт веселуха: в хирургию надо всё больше людей.
не надо передергивать. Очевидно, что если появятся крутые роботы/станки которые могут делать операции, но ими надо управлять через пульт, для обучения работы с которым не надо учиться 8 лет, то очевидно будут набирать простых ребят и туда.
не может непрофессионал писать код.
Более простые ребята - тоже профессионалы. Они делают работу? Делают. Им платят деньги? Платят. Их продукт востребованн рынком? Да.
Очевидно, что большая часть глюков в ПО - это вина менеджмента, а не отдельных кодеров. Это же такие простые истины. Код пишет команда, по определенному плану, с определенными ресурсами, с определенным разделением задач, организацией комуникаций и климате в компании, гибкость в смене стратегий и подходов на ходу. Это влияет на качество кода куда сильнее, чем мнимое гиковство.
нет. я-то его как раз видела. с самого его начала и во всей истории его развития. и понимаю, что «использование современного С++» в 99.99% случаев просто ничем не обосновано. а на практике оно вылезает в ещё большие тормоза, чем классический 98й. хотя теоретически вроде бы там пытались в паре мест что-то оптимтизировать.
в общем, я вижу секту хипстеров-любителей синтаксического сахара. это не опасно, просто глупо. опасно то, что вы защищаете говнокодеров. ещё опаснее то, что комитет пытается лебезить перед говнокодерами и смело несёт в стандарт всякий хлам. ну, это их проблемы. я просто наблюдаю деградацию кода в опенсорце (в корпорациях она тоже есть, просто код не видно). а когда-то, на 98-м, писали очень даже приличный код. и никто не плакал про недостаток фич. всё решалось и работало в сотни раз быстрее.
маски всегда задавались константами. и с этим не было никаких проблем. ни с переносимостью
constexpr и есть константа.
Только удобненькая.
ни с переносимостью
А вот это не правда. Там или нет переносимости, или говнокод адовый, или надежда на особенности компилятора(что он подсчитает а компайл-тайм то что по стандарту не обязан).
профессионал - это профессионал. «тоже» тут неуместно. либо человек программист, либо нет. по крайней мере, в рамках реальных проектов, а не студенческих курсовых. может быть недостаток опыта. но не банальное неумение работы с языком. одного говнокодера в команде хватит, чтобы запороть весь проект.
с самого его начала и во всей истории его развития
Даже если за отсчет брать публичный релиз C++ в 1985-ом году, то сильно сомнительно, что в свои 9-10 лет вы могли видеть C++, да еще в СССР. Не говоря уже про еще более раннюю историю.
и что ты имеешь против ifdef'ов? писал когда-нибудь кроссплатформу? попробуй на досуге.
Писал, именно поэтому и ругаю. В си++ можно обойтись например буквально парочкой ифдефов в паре хэдеров и мейкфайлов, а остальное разделение специчиного кода сделать через темплейты. Внезапно да?
именно тогда я и начала его изучать. именно в СССР. на настоящем PC, дома, а не на каком-нибудь спектруме в компьютерном классе.
правда, сначала был С и ассемблер. С++ я начала изучать, когда уже был борланд С++ первой версии. но тем не менее. все первые стандарты я помню. и могу сравнивать. в 13-14 лет я его уже преподавала своим одноклассникам в лицее.
нет. если код падает в одной мелкой функции, то он падает.
Если код падает, то очевидно, что это не занчит что проект завален. Есть же тестирование(различного уровня), багфиксинг, ревью. Очевидно, что в НОРМАЛЬНОЙ команде один малоопытный, или плохо знающий язык человек не способен завалить проект=)
а в си можно просто разнести платформо- или архитектурно-зависимый код в разные файлы. пример - кернел. внезапно, да? так что темплейты тут не нужны. от слова совсем. я всё к этому и веду. что можно сделать просто и красиво. а можно наворачивать кучу ненужно и это не будет ни грамма читабельнее, или быстрее.
да, багфиксинг, ревью. нужно больше профессионалов, чтобы править код говнокодера! всё это известные бояны от дешёвых манагеров. но это не работает. по факту, говнокодера проще уволить, чем править за ним его косяки. но таки есть вероятность, что миллион обезьянок за клавиатурами могут написать кернел. наверное, могут. теория вероятностей - штука неоспоримая.
Мне? Это вы постоянно прокалываетесь в своих утверждениях.
и то, что было до него! а до него С++ существовал более десяти лет. хотя и в несколько разных реализациях.
Девушка, у слова «стандарт» есть вполне конкретное значение. И, может для вас это станет сюрпризом, первый стандарт (подчеркнем, стандарт) C++ появился в 1998-ом.
До этого стандартов C++ не было. Было несколько версий C++, описанных в разных книгах Б.Страуструпа. Но это не стандарты.
Кстати говоря, тот C++, который вам достался в Turbo C++ 1.0, уже отличался от C++, описанного в самом первом издании «Языка программирования C++». Хотя вряд ли вы Turbo C++ 1.0 видели, скорее уже сразу Borland C++ 2.0.
Увы, рынку нужны быдлокодеры. Чтобы на каком-нибудь пхытоне наковыряли за тарелку риса дерьма, которое со скрипом поработает пару недель... А там нового быдлокодера найдут.
Ну это далеко от правды, куда расти еще есть. Да и потенциал приличный, просто подходы к разработки процов для пробивания «потолка» немного(сильно) отличаются от тех к которым все привыкли за последние лет 20-30.
и почему-то все побежали искать тех, кто умеет писать качественный код.
Не все, а некоторые. Это во-первых. А во-вторых никтому им этого не запрещает, никто не говорит, что топ-инженеры не нужны, никто даже не мешает писать на си++ качественный код, и что вообще главное(разрыв мозга прямо!) никто не запрещает НЕ использовать новомодные фичи с++. Только это никак не влияет на то, что фичи нужны рынку, как и средненькие специалисты.
насчёт прорыва в технологиях процов в ближайшие N лет - маловероятно. скорее, будет топтание на месте и размножение ядер.
что никто не запрещает не юзать что-то ненужное - с этим соглашусь. с этим никогда проблем не было. просто вопрос был в целом о курсе комитета. а так, если не нужны все навороты - сишечка всегда есть под рукой.
Тем более, что за такие вещи, как variadic templates, move semantic, constexpr, noexcept, enum class, static if и еще кучу всякого разного им только спасибо сказать остается.
+!
А ещё за variant, optional, thread, атомики<>, мемори ордер и всё прочее.
тешьте себя дальше. но в 98-м (и до него) и не такое писали. но я больше в этом сраче участвовать не буду. борьба с детсадовцами не доставляет. у меня есть свои дела. а такие задачки можете порешать в качестве домашней работы. подсказка: везде можно избавиться от auto, он никогда не был нужен. это как раз костыль для неосиляторов номер один.
В итоге разворачивается в то же самое говно, как и перегрузка функций в крестах (но, возможно, чуть поменьше итоговый бинарь будет и чуть поменьше будет тупить).
И так везде: все дерьмо из С++ по-человечески делается на сях ручками. Итоговый бинарник будет меньше по размеру, меньше будет жрать памяти и шустрей работать. Да, писать надо будет не неделю, а месяц. Но кого это волнует? Лично мне это только в плюс!
Элементарно делаются элементарные вещи. А функция от нескольких аргументов - уже не так элементарно. Не говоря уже о том, что для добавления новой функции мало добавить саму функцию - надо еще поправить _Generic.
И так везде: все дерьмо из С++ по-человечески делается на сях ручками.
Ты эти сказки рассказывай тем, кто на Си не программировал.
В ифдефы пишем только инклюды, в файлах, которые инклюдятся, еще раз ифдефаемся и в теле ифдефа пишем одинаковый интерфейс с разной реализацией. При компиляции, собираться будут все, но те, которые не попали в ифдеф условия будут пустышками и не займут места в бинаре.