Rock Hard: C++ Evolving Boris Jabes blogs.msdn.com/vcblog (@visualc)
C++0x to become C++11 FDIS Submitted to ISO
Power & Performance on any Platform “Higher-level style of programming more natural than before and as efficient as ever.” “If you timidly approach C++ as just a better C or as an object-oriented language, you are going to miss the point.”
Programming with Values Value = No State || Deep Copy Requires a little bit of forethought
Silly? int Foo(int x) { // check for null if (x == null) // throw exception ... } Bar Foo(Bar x) { // check for null if (x == null) // throw exception ... }
POD struct fighter { string name; int health; }; // just works! int main() { fighter bart = { “bart”, 25 }; fighter lisa = bart; // works just like int! return 0; }
Dynamic Data struct fighter { T* data; string name; int health; fighter(string s, int h) : name(s), health(h), data(new T[1000]) {} }; int main() { fighter bart = { “bart”, 25 }; fighter lisa = bart; // shallow copy return 0; }
Dynamic Data struct fighter { T* data; string name; int health; fighter(string s, int h) : name(s), health(h), data(new T[1000]) {} fighter(const fighter& o) : name(o.name), health(o.health), data(new T[1000]) { std::copy(o.data,o.data+1000,data); } }; int main() { fighter bart = { “bart”, 25 }; fighter kirk(get_fighter()); // this works fighter lisa = bart; // this doesn’t return 0;
Dynamic Data struct fighter { T* data; string name; int health; fighter(string s, int h) : name(s), health(h), data(new T[HUGE]) {} fighter(const fighter& o) : name(o.name), health(o.health), data(new T[HUGE]) { std::copy(o.data,o.data+HUGE,data); } void swap(fighter& left, fighter& right) { std::swap(left.name,right.name); std::swap(left.health,right.health); std::swap(left.data,right.data); // swap head pointer fighter& operator=(fighter o) { swap(*this,o); return *this; };
Expensive Copy struct fighter { T* data; string name; int health; fighter(string s, int h) : name(s), health(h), data(new T[HUGE]) {} fighter(const fighter& o) : name(o.name), health(o.health), data(new T[HUGE]) { std::copy(o.data,o.data+HUGE,data); } friend void swap(fighter& left, fighter& right) { std::swap(left.name,right.name); std::swap(left.health,right.health); std::swap(left.data,right.data); // swap head pointer fighter& operator=(fighter o) { swap(*this,o); return *this; fighter(fighter&& o) : data(nullptr) { };
Destructors + RAII = The Best of C++ Determinism for Resources Cache-Locality Seamless with Exceptions Zero Burden on API Consumer
Higher-Order Programming Multi-Paradigm Generic Control And Yet… Efficient
Control in Context Lambdas
C# List<Action> actions = new List<Action>(); for (int counter = 0; counter < 10; counter++) { actions.Add(() => Console.WriteLine(counter)); } foreach (Action action in actions) action();
C# List<Action> actions = new List<Action>(); for (int counter = 0; counter < 10; counter++) { int copy = counter; actions.Add(() => Console.WriteLine(copy)); } foreach (Action action in actions) { action(); }
C++ vector<function<void()> actions; for (int counter = 0; counter < 10; counter++) { actions.push_back([&] { cout << counter << endl; }); } for(int i=0; i<actions.size(); ++i) actions[i]();
C++ vector<function<void()> actions; for (int counter = 0; counter < 10; counter++) { actions.push_back([=] { cout << counter << endl; }); } for(int i=0; i<actions.size(); ++i) actions[i]();
C++11 Coming Soon to a Compiler Near You Modern C++ != “C with Classes” C++11 = Expressive Without Sacrifice C++11 is Concurrent Go Forth & Be Merry
Stay up to date with MSDN Belux Register for our newsletters and stay up to date: http://www.msdn-newsletters.be Technical updates Event announcements and registration Top downloads Follow our blog http://blogs.msdn.com/belux Join us on Facebook http://www.facebook.com/msdnbe http://www.facebook.com/msdnbelux LinkedIn: http://linkd.in/msdnbelux/ Twitter: @msdnbelux Download MSDN/TechNet Desktop Gadget http://bit.ly/msdntngadget
TechDays 2011 On-Demand Watch this session on-demand via Channel9 http://channel9.msdn.com/belux Download to your favorite MP3 or video player Get access to slides and recommended resources by the speakers
THANK YOU