The project I’ve been working on for the last several months is using native C++. Since I haven’t employed C++ in a long time (since school, to be precise), I had to “relearn” the language. As expected, the language grew a lot since last I was acquainted with it, and I was impressed with the new features (see Working Draft, Standard for Programming Language C++for more details on the changes). Luckily, my project is a startup, and we are allowed to use the new futures without fears of back interoperability or style consistency. A big help with the learning curve was Visual Studio 2010, which really improves both the coding and debugging experience. I must say, the transition from C# to C++ was much easier because I used the same tools.
Here are some resources I used to get back to native code (as you noticed, I haven’t use the keyword “unmanaged”: a lot of C++ users consider the term “unmanaged” degrading, because it somewhat implies that unmanaged is somewhat inferior to managed or developed after managed code):
These books helped me refresh my C++ memory. On top of this, I had to get familiar with the new 0x features: lambdas (unnamed function objects), auto (automatic type deduction), static_assert (trigger compiler errors with custom error messages), RValue references (move semantics and perfect forwarding) and decltype. Here are the articles I recommend from the Visual C++ team blog:
Other materials:
As in any process of learning, I made mistakes and I learned from them. Some mistakes were due to faulty expectations coming from the C# world – like C++ scoped static initialization is not thread-safe, on purpose!. I’m still learning, and I’m still making mistakes. In future blogs I will share with you some of these mistakes.