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?
It's legal to declare a copy constructor explicit. Declaring it or not really depends on what you want to do. For example, you declare a copy constructor explicit
if you want to forbid it from being called implicitly at function calls or with the copy-initialization syntax.