The string assignment operator has been overloaded for char so what really happens in the first code snippet is that 1 is implicitly casted to a char that is then assigned to the string.
There is no string constructor that takes only a char as argument so that's why the second code snippet doesn't work. To be honest I think it's a bit inconsistent.