Evolution of C++: Power and Performance in Programming
Explore the evolution of C++ from C++0x to C++11, focusing on power and performance on any platform with a higher-level style of programming. Understand the efficiency of programming with values and the importance of deep copying. Dive into the world of C++ development and learn how to leverage its capabilities effectively.
Download Presentation

Please find below an Image/Link to download the presentation.
The content on the website is provided AS IS for your information and personal use only. It may not be sold, licensed, or shared on other websites without obtaining consent from the author.If you encounter any issues during the download, it is possible that the publisher has removed the file from their server.
You are allowed to download the files provided on this website for personal or commercial use, subject to the condition that they are used lawfully. All files are the property of their respective owners.
The content on the website is provided AS IS for your information and personal use only. It may not be sold, licensed, or shared on other websites without obtaining consent from the author.
E N D
Presentation Transcript
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? Bar Foo(Bar x) { // check for null if (x == null) // throw exception ... } int Foo(int 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) { swap(*this,o); } };
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