310 likes | 479 Views
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.”
E N D
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 • structfighter { • 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 • structfighter { • 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++){intcopy = 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 bloghttp://blogs.msdn.com/belux • Join us on Facebookhttp://www.facebook.com/msdnbehttp://www.facebook.com/msdnbelux • LinkedIn: http://linkd.in/msdnbelux/ • Twitter: @msdnbelux DownloadMSDN/TechNet Desktop Gadgethttp://bit.ly/msdntngadget
TechDays 2011 On-Demand • Watchthis session on-demand via Channel9http://channel9.msdn.com/belux • Download to your favorite MP3 or video player • Get access to slides and recommended resources by the speakers