Presentation is loading. Please wait.

Presentation is loading. Please wait.

Rock Hard: C++ Evolving

Similar presentations


Presentation on theme: "Rock Hard: C++ Evolving"— Presentation transcript:

1 Rock Hard: C++ Evolving
Boris Jabes blogs.msdn.com/vcblog

2 C++0x to become C++11 FDIS Submitted to ISO

3

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.”

5

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 ... }

8

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) { };

14

15

16

17

18

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]();

26

27

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


Download ppt "Rock Hard: C++ Evolving"

Similar presentations


Ads by Google