You don't have to define if it's a float, string, or integer with printf. int num = 5; printf(num); will print "5". Printf also doesn't use a buffer, so you can't overflow the function any more than you can overflow cout. I assume you mean overflow, because an overload is something entirely irrelevant to printing anything.
overloading the operators >> or << and changing the way they print certain variables
also i was referring to
int number = 12;
printf("%f", number); //gives a value of 'nan'
std::cout << number;
cout knows the variable number is an integer, printf will not know how to do that unless you define it, the automatic process from cout stops you from making silly mistakes like above
also if you do just printf(number) you get an error saying 'cannot convert "int" to "const char*"'
i guess its more of a personal preference but i see more benefits to cout