#
A constructor that is not explicit ([dcl.fct.spec]) specifies a conversion from the types of its parameters (if any) to the type of its class.
[Example 1: struct X { X(int); X(const char*, int = 0); X(int, int); }; void f(X arg) { X a = 1; / a = X(1) X b = "Jessie"; / b = X("Jessie",0) a = 2; / a = X(2) f(3); / f(X(3)) f({1, 2}); / f(X(1,2)) } — end example]
[Note 1: 
An explicit constructor constructs objects just like non-explicit constructors, but does so only where the direct-initialization syntax ([dcl.init]) or where casts ([expr.static.cast], [expr.cast]) are explicitly used; see also [over.match.copy].
A default constructor can be an explicit constructor; such a constructor will be used to perform default-initialization or value-initialization ([dcl.init]).
[Example 2: struct Z { explicit Z(); explicit Z(int); explicit Z(int, int); }; Z a; / OK, default-initialization performed Z b{}; / OK, direct initialization syntax used Z c = {}; / error: copy-list-initialization Z a1 = 1; / error: no implicit conversion Z a3 = Z(1); / OK, direct initialization syntax used Z a2(1); / OK, direct initialization syntax used Z* p = new Z(1); / OK, direct initialization syntax used Z a4 = (Z)1; / OK, explicit cast used Z a5 = static_cast<Z>(1); / OK, explicit cast used Z a6 = { 3, 4 }; / error: no implicit conversion — end example]
— end note]

Follow Lee on X/Twitter - Father, Husband, Serial builder creating AI, crypto, games & web tools. We are friends :) AI Will Come To Life!

Check out: eBank.nz (Art Generator) | Netwrck.com (AI Tools) | Text-Generator.io (AI API) | BitBank.nz (Crypto AI) | ReadingTime (Kids Reading) | RewordGame | BigMultiplayerChess | WebFiddle | How.nz | Helix AI Assistant