Bumped into this informative post on CLCM about why explicit constructors were introduced in C++ language. Here is the excerpt from Daniel Krugler:
Originally there did not exist explicit constructors (not to speak of explicit conversion functions) in C++. It turned out that this could lead to a lot of unexpected conversions with unwanted side-effects. To give a class designer a choice, explicit constructors were invented and their interaction rules with expressions. The categories direct-initialization and copy-initialization were separated to allow for discrimination between conversions considered in
explicit
andnon-explicit
conversions.