Синтаксис конструктора в операторе возврата? - PullRequest
2 голосов
/ 24 мая 2019

Я понимаю все о следующем коде, кроме этой строки

A f(){return A(i);}

В частности, я не понимаю синтаксис A(i). Я знаю, что он возвращает значение типа A, но что означает i в скобках?

Это вызов конструктора с некоторой переменной?

#include <iostream>
using namespace ::std;

class A{
    public:
        int j;
        A(int z){j = z;}
        int g(){return j;}
        int operator+(A a){return a.j + j;}
};
class B{
    public:
        int i;
        B(A a){i = a.j;}
        A f(){return A(i);} // ???
        A operator-(){return A(i);}
};
int main(){
    A a(1);
    B b = a;

    a.j = b.f() + a;
    b.i = a.g();
    a = -b;
    return 0;
}

Ответы [ 2 ]

6 голосов
/ 24 мая 2019

A(i) является функциональным выражением приведения.Это создает временный объект A из i.Процесс вызовет соответствующий A конструктор.

В C ++ программист не может "вызвать конструктор".Программист создает объекты во всевозможных местах, и конструкция организуется автоматически.Функциональное выражение приведения является одним из таких способов создания объекта.

И имейте в виду, что, хотя формально это «создание временного», копирование elision (оптимизация возвращаемого значения) фактически заставит его инициализировать возвращаемое значение напрямую..

2 голосов
/ 24 мая 2019

Создает A, вызывая конструктор A(int z).

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