struct WithImplicit { WithImplicit(int) {} }; struct WithExplicit { explicit WithExplicit(int) {} }; struct Without { }; // implicit conversion (usually more hidden than this exposed example) // this is often a bug if the class is not a "Better int" WithImplicit withImplicit = 12345; // implicit conversion from int is prohibited by an explicit constructor WithExplicit withExplicit = 12345; WithExplicit withExplicit1(12345); // this is not an implicit conversion WithExplicit withExplicit2 = WithExplicit(12345); // this is not implicit // implicit conversion from int is prohibited by a lack of constructor Without without = 12345;