Я читаю о конструкторах копирования и различиях между инициализацией копирования и прямой инициализацией. Я знаю, что копирование и прямая инициализация различаются только для типов (определяемых пользователем) классов, а первое подразумевает иногда неявное преобразование (конструктором преобразования). Например, если бы я мог инициализировать объект класса A:
class A {
public:
// default constructor
A() : a(1) {}
// converting constructor
A(int i) : a(i) {}
// copy constructor
A(const A &other) : a(other.a) {}
private:
int a;
};
int main()
{
// calls A::A(int)
A a(10);
// calls A::A(int) to construct a temporary A (if converting constructor is not explicit)
// and then calls A::A(const A&) (if no elision is performed)
A b=10;
// calls copy constructor A::A(const A&) to construct an A from a temporary A
A c=A();
// what does this line do?
A d(A());
}
Я читал, что последняя строка не создает A путем прямой инициализации d из временного A(), но объявляет функцию с именем d, которая возвращает A и принимает аргумент типа функции (указатель на функцию действительно). Итак, мой вопрос: это правда? и если это правда, как я могу выполнить прямую инициализацию объекта из временного типа:
type_1 name(type_2(args));
предполагая, что type_1
имеет конструктор, который принимает параметр типа type_2
Это то, что нельзя сделать?