VS2008 C ++ Ошибка компилятора? - PullRequest
2 голосов
/ 01 сентября 2009

это компилируется: -)

string name;
name = 1;

это не:

string name = 1;

есть мысли?

Я знаю, что это неправильно. , , это не главное. Первый дает смайлик.

Ответы [ 3 ]

14 голосов
/ 01 сентября 2009

Первый компилируется, потому что оператор присваивания называется тем, что имеет одну сигнатуру "string & operator = (char c)", и компилятор может преобразовать 1 в символ.

Второй не скомпилируется, потому что он вызывает конструктор копирования, у которого нет совместимой подписи.

4 голосов
/ 01 сентября 2009

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

Кстати, это не относится к Visual Studio. Любой компилятор C ++ должен вести себя так же.

1 голос
/ 01 сентября 2009

Не касается вопроса, но почему бы вам (и многим другим) не опубликовать скомпилированный код. Будет:

#include <string>
using namespace std;

int main() {
    string name;
    name = 1;
    string name2 = 1;
}

было слишком много просить? Учитывая это, мы видим, что «строка» на самом деле ссылается на std :: string, а не на какой-то случайный класс.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...