C++ provides the keyword explicit to suppress implicit conversions via conversion constructors when such conversions should not be allowed. A constructor that's declared explicit cannot be used in an implicit conversion. Use the explicit keyword on single-argument constructors that should not be used by the compiler to perform implicit conversions.
This makes sense, BUT should I still use the keyword explicit for copy constructors? In what other cases would it be useful to use the keyword explicit and why?