rock hard: c++ evolving

Post on 24-Feb-2016

43 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

DESCRIPTION

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.” - PowerPoint PPT Presentation

TRANSCRIPT

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

top related