Download - Rock Hard: C++ Evolving
Rock Hard: C++ EvolvingBoris Jabes
blogs.msdn.com/vcblog (@visualc)
C++0x to become C++11FDIS 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 ValuesValue = No State || Deep Copy
Requires a little bit of forethought
Silly?
int Foo(int x){
// check for nullif (x == null)
// throw exception
...}
Bar Foo(Bar x){
// check for nullif (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 copyreturn 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 worksfighter lisa = bart; // this doesn’treturn 0;
}
Dynamic Datastruct 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 Copystruct 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-LocalitySeamless with Exceptions
Zero Burden on API Consumer
Higher-Order ProgrammingMulti-Paradigm
GenericControl
And Yet… Efficient
Control in ContextLambdas
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 ConcurrentGo 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
Download MSDN/TechNet Desktop Gadget
http://bit.ly/msdntngadget
TechDays 2011 On-Demand
• Watch this 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
THANK YOU