Я часто вижу, что:
string str = "123";
Мой вопрос, если string
это тип класса, почему мы можем прямо установить его равным "123"
Вместо того, чтобы использовать new
или напрямую его инициализировать?
Я привык видеть что-то вроде
classType *pt = new classType;
classType pt = classType();
не
classType s = value;
Строковый тип C ++ имеет неявный конструктор преобразования, который принимает в качестве входных данных const char *
, Следовательно, допустимо инициализировать строку C ++, используя строку в стиле C, потому что C ++ будет интерпретировать это как вызов конструктора неявного преобразования.
В этом случае код
string str = "123";
эквивалентно
string str("123");
который более явно выглядит как вызов конструктора.
Обратите внимание, что очень редко можно увидеть что-то вроде
classType p = classType();
Более правильный способ сказать это было бы просто написать
classType p;
который неявно вызывает конструктор по умолчанию, без аргументов.
Надеюсь это поможет!
Других решений пока нет …