Facilitating the Spread of Knowledge and Innovation in Professional Software Development

Write for InfoQ


Choose your language

InfoQ Homepage News Modern C++ and Visual Studio

Modern C++ and Visual Studio

Leia em Português

This item in japanese

Herb Sutter gave a talk on the current state of Modern C++ during Microsoft’s Build conference.  The promotion of C++ has undergone something of a renaissance these past few years at Microsoft, and Sutter has been part of directing this increased focus.   


Upcoming C++ Releases

Sutter began his talk by providing a quick summary of where the ISO C++ standards are at the moment.  This past February the technical discussion for C++14 was completed, and the standards committee is currently reviewing the proceedings with the intent to vote on approving this standard to be an official ISO standard later this year.

The C++14 release is considered a minor release, whereas the forthcoming C++17 standard (still under design and in discussions) is considered a major release.  Microsoft’s most recent compiler preview (CTP) was released this past November.  The next CTP (announce date yet to be given) is expected to contain the following features with a high degree of confidence according to Sutter:

  • User-defined literals
  • C++14 generalized lambda capture
  • C++14 libs: std:: user-defined literals
  • Inline namespaces 

There is a medium certainty that the following features will be in the this CTP (meaning they could be delayed to a later release):

  • Universal character names in literals
  • noexcept (incl. conditional)
  • char16_t, char32_t, attributes
  • thread_local
  • unrestricted unions
  • consexpr (except ctors, literal types)
  • constexpr (incl. ctors, literal types)

Parallel STL (A convergence of PPL, TBB, Amp, CUDA, Thrust) will be released next week on CodePlex.  Sutter announced that the C++ conference Microsoft has sponsored the past two years (GoingNative) has been replaced by CPPCon, which is scheduled to take place September 7 -12, 2014.  


Modern C++ Use Cases

The next portion of his talk moved from release discussions to talking about the use-cases for modern C++ in today’s application development.  In Sutter’s opinion, C++ should be used when the following goals or objectives are required:

  • Cross-platform portability and compatibility
  • High performance and full control
  • Full access to hardware and OS resources
  • C++ language highlights:  value types by defaults, determinism by default, contiguous by default 

Sutter observes that Modern C++ is not C++98-- Modern C++ is cleaner and safer while remaining fast and flexible.  That is not to say that older C++ is not supported, as in many cases it will compile albeit with warnings and suggestions from the compiler on how it can be improved. 

One of the features that Modern C++ offers is simplified (from the programmer’s perspective) memory management when using new-> make_unique or new->make_shared.  No need for delete, automatic lifetime management exception-safe.

Another area is how values types are handled more efficiently for move operations.  C++11 added the idea of moving object-like types.  Building on this approach, the ability exists to take ownership instead of making copies that have to then be deleted.  The improved move semantics can improve the speed of legacy code simply by recompiling with C++14 capable compiler.


Writing faster code

Contiguous arrays are just as important and often missed, if you are visiting many objects, you seriously want to visit them in adjacent address order.  If you are serious about performance you’ll use arrays, not just lists and arraylists.

Continuing along that theme, Sutter provided benchmarks indicating that the use of vector beats lists massively for insertion and deletion.  Pre-allocating list is faster than just a regular list, but both remain much worse than Vector.

Sutter’s talk is very informative and he remains an engaging speaker.  Refer to the Channel9 site to watch the full talk.

Rate this Article