explicit is a keyword to disable converting constructors.
The example below will not compile, due to the explicit keyword written in the constructor of Test:
The line in main needs to call a converting constructor, because an int is not a Test (that is: they are different data types).
- Make constructors explicit whenever possible [1]
- By default declare single-argument constructors explicit [2]
- Herb Sutter. Exceptional C++. ISBN: 0-201-61562-2. Item 20, page 71, top guideline :'Watch out for hidden temporaries created by implicit conversions. One good way to avoid this is to make constructors explicit when possible, and avoiding writing conversion operators'
- Bjarne Stroustrup. The C++ Programming Language (4th edition). 2013. ISBN: 978-0-321-56384-2. Chapter 16.4. Advice. page 479: '[5] By default declare single-argument constructors explicit'