Конструктор вызывается с созданием объекта - PullRequest
0 голосов
/ 03 марта 2019
class P{
    public:
    P(int x,int y) { cout << "constructor called" << endl;}
};

int main ()
{
    P(5,4);    // constructor called  
    P p(5,4);  // constructor called
    return 0;
}

В чем разница между двумя вышеупомянутыми вызовами конструктора?

Как P(5,4) вызывает конструктор?

Ответы [ 2 ]

0 голосов
/ 04 марта 2019

В C ++ имя типа, за которым следует (возможно, пустой) список в скобках, является предварительным выражением, которое (обычно) приводит к созданию временного объекта этого типа, а список состоит из аргументов конструктора.

Исключением является случай синтаксической неоднозначности, см. Здесь .

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

0 голосов
/ 03 марта 2019

Эти два вызова идентичны.

Разница лишь в том, что вы удерживаете созданный объект во второй локальной переменной p

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