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 objectoriented language, you are going to miss the point.”
Programming with Values
Value = No State || Deep Copy
Requires a little bit of forethought
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
...
}
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
Download
http://blogs.msdn.com/belux
MSDN/TechNet Desktop Gadget
http://bit.ly/msdntngadget
• Join us on Facebook
http://www.facebook.com/msdnbe
http://www.facebook.com/msdnbelux
• LinkedIn: http://linkd.in/msdnbelux/
• Twitter: @msdnbelux
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
THANK YOU
© Copyright 2026 Paperzz