Я был разработчиком C++ (в основном, для ATL / COM), пока, как и многие из нас, не перешел на C# в 2001 году. С тех пор я мало занимался программированием на C++.
У вас есть какие-нибудь советы, как восстановить мои навыки C++? Что изменилось в C++ за последние годы? Есть ли хорошие книги, статьи или блоги, посвященные этому языку. Проблема в том, что большинство материалов, которые я смог найти, предназначены либо для людей, которые плохо знакомы с языком, либо для людей с большим опытом.
Какие библиотеки C++ популярны в наши дни? Думаю, мне нужно будет прочитать о STL, потому что я мало им пользовался. Что еще? Способствовать росту? ATL? WTL?





Чтобы отточить свои навыки C++, я бы посоветовал просмотреть часть вашего старого кода C++, если у вас все еще есть к нему доступ. Мы надеемся, что если вы вернетесь к нему, это запустит те части вашего мозга, которые бездействовали после перехода на C# :)
Для библиотек хорош STL, тогда буст. Я не думаю, что с ATL / WTL происходит слишком много нового из того, что вы знали еще в 2001 году.
Просто начни проект. Библиотеки, которые вы используете, будут зависеть от вашего проекта, но вы обязательно должны прочитать STL. Если вы долгое время не использовали C++, вам может потребоваться дополнительная информация о шаблонах.
Для начала я бы посоветовал написать код, который будет работать как на Mac, так и на Windows или Linux и Windows. Это заставит вас писать код, который будет намного более переносимым, чем код C++, который вы можете использовать в Visual C++ - есть много более тонких моментов, которые сильно отличаются при переходе на кросс-платформу.
Я бы посоветовал пока держаться подальше от библиотек, если можете - сначала усовершенствуйте свою игру на ANSI C++. Я также предлагаю почитать C++ 0x - скоро выйдет следующий стандарт, и он поможет вам больше работать в этом направлении. С этой целью освежите в памяти STL (концепции, лежащие в основе этого, а не реализацию) и шаблоны.
Если вы хотите попробовать BOOST, продолжайте, но обычно вы можете обойтись и без него. Причина, по которой я избегал этого в основном, заключается в том, как шаблоны используются для выполнения того, что необходимо - многие из которых станут намного проще после введения нового стандарта.
ОБНОВЛЕНИЕ: как только вы освоитесь с STL и начнете делать что-то, что требует большого количества кода с помощью STL или просто сложно, тогда переходите к BOOST. Купите книгу о BOOST, прочтите и хорошо ее поймете.
Способствовать росту - хотя он и другие библиотеки существовали тогда, только относительно недавно он стал популярным. Google для стандартов TR1 и C++ 0x тоже. Вы должны обязательно прочитать STL, потому что (IMHO) это то, что делает C++ особенным.
ATL так же хороша, как и мертвая технология (не поймите меня неправильно, мне она понравилась, и я до сих пор ею пользуюсь, но это уже не модно в мире MS).
Что-то вроде QT, вероятно, более ново и круто для разработчиков C++, и имеет то преимущество, что вы знакомитесь со всеми новыми Linux и веб-разработками, которые будут становиться все более популярными в ближайшие несколько лет.
Однако, как только вы начнете смотреть на то, что вы можете делать, я думаю, все это довольно быстро вернется.
Возьмите какой-нибудь старый фрагмент кода и добавьте к нему. Это не вернет вас к последним трендам C++, но промокнет.
На моей работе мне пришлось добавить некоторые функции в элемент управления C++ ActiveX, и я не прикасался к C++ годами и никогда не делал этого профессионально. Думать, как это сделать снова, было чертовски круто.
Я лично считаю, что синтаксис - это то место, где мне в основном нужно наверстать упущенное, когда я возвращаюсь к языку, который давно не использовал. Но концепции и смысл языка остаются в памяти неизменными.
Предполагая, что то же самое и с вами, я бы сказал, что это хорошая идея пересмотреть тексты, которые, как вы помните, были вам полезны при изучении C++. Я бы порекомендовал «Мышление на C++», чтобы быстро освоить синтаксис.
Да, STL был бы действительно полезен. Это единственное, что, как мне кажется, ценится всеми зрелыми программистами на C++. Было бы полезно знать библиотеки, которые предоставляет Boost.
Изменения в мире C++ зависят от изменений, которые ваш любимый компилятор решил реализовать. Поскольку вы упомянули AT1 / COM, я предполагаю, что это будет VC++. Изменения в MFC будут поддерживать Windows Forms (2005 vC++) и Vista-совместимый пользовательский интерфейс и поддержку ленты (?) (2008 VC++)
VC++ теперь поддерживает управляемый C++ - я уверен, что вы знаете, что это происходит из мира C# - 2008 также добавляет поддержку управляемого STL.
VC++ пытается больше соответствовать стандартам и добивается определенных успехов в этой области.
Они представили множество безопасных функций, которые обесценивают старые std, такие как strcpy, и компиляторы также выдают предупреждения, если вы используете старые fns.
VC++ 2005 также имеет так называемые атрибуты функций, которые он использует для описания параметров, чтобы он мог больше проверять входные данные, которые вы передаете, и статически помечать предупреждение, если оно видит что-то не так. Полезно сказал бы, хотя наш магазин еще не перешел на использование компилятора 2005 года.
В MSDN есть список критических изменений для каждого выпуска. Oh & Поддержка Windows 95, Windows 98, Windows Millennium Edition и Windows NT 4.0 была удалена из версии VC++ 2005 года. Кроме того, основные библиотеки, которые вам требовались до сих пор (CRT, ATL, MFC и т. д.), Теперь поддерживают новую модель развертывания, которая делает их общими боковыми сборками и требует манифеста.
Эта ссылка должна помочь вам - http://msdn.microsoft.com/en-us/library/y8bt6w34.aspx
2008 добавляет еще больше, таких как рекомендации Tr1, более оптимизирующий компилятор, параллельная компиляция (/ mp), поддержка новых архитектур процессоров и т. д. Поддержка Open Mp также была улучшена в одной из этих версий - это то, что я помню.
Снова обратитесь к MSDN - это достоверный источник всех ответов.
Удачи.
С 2001 года язык, возможно, изменился лишь незначительно, но способ его написания полностью изменился. В результате я считаю этот ответ в основном неправильным. -1
У меня была аналогичная ситуация: переключился с C++ на C# в 2005 году, а затем снова переключился на C++ в 2007 году. Я не могу сказать, что вселенная C++ действительно изменилась за эти 2 года. Самым важным было восстановить мои инстинкты управления памятью, но это можно было сделать только практикой.
Теперь, когда у вас есть как C++, так и .NET, вы можете немного изучить C++ CLI (новое воплощение позднего «Managed C++»).
Что касается книг, читайте все, что на обложке есть «Мейерс» и «Саттер».
Даже MS дистанцируется между собой и C++ CLI.
Перепишите некоторые из ваших материалов на C#, используя C++
100% согласен. Я нашел это весьма поучительным.
Обязательно прочтите последнее издание «Эффективного C++» Скотта Мейерса. Я также порекомендовал бы Стивена К. Дьюхерста "Попытки C++: как избежать общих проблем в кодировании и дизайне".
Возьмите одну из имеющихся фреймворков C++ Unit Test (я предлагаю Платформа тестирования Google C++, он же gtest). Выберите небольшой проект, который вы можете начать с нуля, и попробуйте TDD. TDD побудит вас делать небольшие шаги и размышлять над своим кодом. Кроме того, когда вы создаете свой набор модульных тестов, он дает вам основу, на которой вы можете экспериментировать с различными методами.
/ mp также находится в 2005 году, но не задокументирован