В C ++ имя типа, за которым следует (возможно, пустой) список в скобках, является предварительным выражением, которое (обычно) приводит к созданию временного объекта этого типа, а список состоит из аргументов конструктора.
Исключением является случай синтаксической неоднозначности, см. Здесь .
Сравните с P p = P(5,4);
В P(5,4);
у вас все еще та же правая сторона, но вы просто позволяетеобъект будет создан и уничтожен вместо того, чтобы связывать его с именем p
.