Это законно.
Вы никогда не вызываете конструктор самостоятельно; вы на самом деле просто объявляете безымянный или «временный» объект типа Item
. Посмотрите, как развивается синтаксис, когда вы делаете объект безымянным:
Item a(img,i); // normal
Item(img,i); // temporary
Даже если выглядит так, как будто вы вызываете конструктор как функцию, это не так.
В любом случае, вы можете использовать временное значение как «значение» (потому что оно одно) в аргументах функций и т. П., Что вы и делаете здесь.
Кстати, не используйте старые заголовки iostream.h
и vector.h
. Они датируются 1998 годом. В стандарте ISO C ++ вы должны использовать iostream
и vector
соответственно. Стандартные заголовки в C ++ не заканчиваются на «.h» (inb4, игнорируя заголовки C, унаследованные для обратной совместимости).