Но ведь конструктор сам в свою очередь никаких значений не возвращает.
Он пишется так, что в его теле не нужно и нельзя писать возврат чего-то явным образом, но вообще, «извне», это функция, возвращающая значение соответствующего класса. Так что
func() делает ровным счётом то же что
X().
Когда вы видите конструкцию навроде
C x(...); — синтаксически это не вызов конструктора, это
вид инициализации, и её можно делать для вещей вовсе без конструкторов, типа
int n(2); (
проверка). Она понимается примерно как
C x; x = C(...);, хотя скорее всего в стандарте всё хитрее.
А про присваивание я уже ничего не скажу, ерунда скорее всего получится. По идее временная переменная инициализируется результатом
func(), а потом ей присваивается
X(1), но я удивлён, что
func() — это lvalue.
-- Вс дек 29, 2019 17:30:45 --Если окажется, что у меня выше нет существенных ошибок, то это чёрт возьми как-то смешно. Я лишь читал старый учебник по плюсам когда-то давно, когда на них не писал, и потом пользовался ими лишь пару раз в университете и всё. Я их не знаю, но почему я знаю это?