Chapter 3. Moving to Modern C++
When it comes to big-name features, C++11 and C++14 have a lot to boast of. auto
, smart pointers, move semantics, lambdas, concurrencyâeach is so important, I devote a chapter to it. Itâs essential to master those features, but becoming an effective modern C++ programmer requires a series of smaller steps, too. Each step answers specific questions that arise during the journey from C++98 to modern C++. When should you use braces instead of parentheses for object creation? Why are alias declarations better than typedef
s? How does constexpr
differ from const
? Whatâs the relationship between const
member functions and thread safety? The list goes on and on. And one by one, this chapter provides the answers.
Item 7:âDistinguish between ()
and {}
when creating objects.
Depending on your perspective, syntax choices for object initialization in C++11 embody either an embarrassment of riches or a confusing mess. As a general rule, initialization values may be specified with parentheses, an equals sign, or braces:
int x(0); // initializer is in parentheses int y = 0; // initializer follows "=" int z{ 0 }; // initializer is in braces
In many cases, itâs also possible to use an equals sign and braces together:
int z = { 0 }; // initializer uses "=" and braces
For the remainder of this Item, Iâll generally ignore the equals-sign-plus-braces syntax, because C++ usually treats it the same as the braces-only version.
The âconfusing messâ lobby ...
Get Effective Modern C++ now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.