Второй пример - это действительно инициализация, а не присваивание, т.е. е. он вызывает конструктор, а не operator=
. Очевидно, класс string
не имеет конструктора, который принимает целое число в качестве аргумента, но его оператор присваивания в порядке И причина, по которой вы получаете смайлик, в том, что это персонаж со значением ASCII, равным 1.
Кстати, это не относится к Visual Studio. Любой компилятор C ++ должен вести себя так же.