Skip to Content
Learning Modern C++ for Finance
book

Learning Modern C++ for Finance

by Daniel Hanson
November 2024
Intermediate to advanced
430 pages
10h 39m
English
O'Reilly Media, Inc.
Book available
Content preview from Learning Modern C++ for Finance

Appendix D. Resolving Conflicts in the Initialization of a vector

This appendix is a supplement to “A potential pitfall with the meaning of () and {} with a vector”. That content requires some background on a feature added to the Standard Library with C++11, std::initializer_list. You can find more details on this topic in Section 3.1.3 of The C++ Standard Library: A Tutorial and Reference, 2nd edition, by Nicolai M. Josuttis (O’Reilly, 2012).

In the vector class, we will find multiple constructors, including the following two:

template <typename T /* ... this is a simplification */>
   class vector
   {
      // ...
   public:
      vector(size_type, const T&);        // number of elements, initial value
      vector(std::initializer_list<T>);   // braces with values of type T
      // ...
   };

For this reason, given a vector<int> type and two values of integral types, both constructors are viable:

// 10 ints of value -1 or two ints valued 10 and -1?
vector<int> v1{10, -1};      // two ints valued 10 and -1
vector<int> v2(10, -1);      // 10 ints of value -1

In C++, when using braces in a constructor, if there’s a choice to be made between a constructor with an std::initializer_list (#include<initializer_list>) and another constructor, and both are viable, then the one that accepts a initializer_list takes preference. In contrast, when using parentheses, the one accepting an initializer_list is not considered (by definition). This leads to a surprising dichotomy, but it is part of the rules of the language (it would definitely be ...

Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Start your free trial

You might also like

Complete Modern C++ (C++11/14/17)

Complete Modern C++ (C++11/14/17)

Umar Lone
The Complete C++ Developer Course

The Complete C++ Developer Course

Codestars By Rob Percival, John P. Baugh

Publisher Resources

ISBN: 9781098100797Errata PageSupplemental Content