В этом фрагменте кода, который на самом деле называется конструктором?Какой конструктор вызывается здесь?
Vector v = getVector();
Vector имеет конструктор копирования, конструктор по умолчанию и оператор присваивания:
class Vector {
public:
...
Vector();
Vector(const Vector& other);
Vector& operator=(const Vector& other);
};
getVector возвращается по значению.
Vector getVector();
В коде используется стандарт C++ 03.
Фрагмент кода выглядит так, как будто он должен вызвать конструктор по умолчанию, а затем оператор присваивания, но я подозреваю, что это объявление является другой формой использования конструктора копирования. Что правильно?
Одно правило, стоящее ничто, заключается в том, что конструктор копирования должен быть доступен (например, общедоступный), даже если сама по себе сама конструкция копии исключается. Таким образом, возможно, что конструктор копирования будет закрыт, код не будет компилироваться и сделать его общедоступным, он будет компилироваться, но конструктор копирования не будет вызван. – 6502
«тот же физический объект, который хранится в v» - скорее, объект, созданный внутри функции, представляет собой тот же физический объект, что и 'v'. Обычно я говорю, что либо 'v' - это имя объекта, либо' v' - этот объект, но не «объект хранится в' v' ". Обычная реализация этой копии - это то, что вызывающий элемент getVector передает указатель в качестве дополнительного скрытого параметра, а 'getVector' создает возвращаемое значение по этому адресу. В этом случае стандарт позволяет вызывающему коду передавать '& v' в качестве скрытого параметра. –