Download presentation
Presentation is loading. Please wait.
1
Rock Hard: C++ Evolving
Boris Jabes blogs.msdn.com/vcblog
2
C++0x to become C++11 FDIS Submitted to ISO
4
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.”
6
Programming with Values
Value = No State || Deep Copy Requires a little bit of forethought
7
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 ... }
9
POD struct fighter { string name; int health; }; // just works! int main() { fighter bart = { “bart”, 25 }; fighter lisa = bart; // works just like int! return 0; }
10
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; }
11
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;
12
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; };
13
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) { };
19
Destructors + RAII = The Best of C++
Determinism for Resources Cache-Locality Seamless with Exceptions Zero Burden on API Consumer
20
Higher-Order Programming
Multi-Paradigm Generic Control And Yet… Efficient
21
Control in Context Lambdas
22
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();
23
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(); }
24
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]();
25
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]();
28
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
29
Stay up to date with MSDN Belux
Register for our newsletters and stay up to date: Technical updates Event announcements and registration Top downloads Follow our blog Join us on Facebook LinkedIn: Download MSDN/TechNet Desktop Gadget
30
TechDays On-Demand Watch this session on-demand via Channel9 Download to your favorite MP3 or video player Get access to slides and recommended resources by the speakers
31
THANK YOU
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.