When should you use direct initialization and when copy initialization?
Is it simply preference or are there specific instances where one is necessary over another? I'm refering to the following variants for initialization T t(e); // direct initialization T t = e; // copy initialization The actual names of the things you describe is not implicit and explicit assignment but : Copy-initialization : T x = a; Direct-initialization : T x(a); They are not equivalent, most notably in contexts where a conversion is required, for example when T is of class type and a is of a different type (see Alf comment for examples of contexts which don't even involve conversion).