Почему не срабатывает конструктор копирования?
class cl {
public:
static int s;
int s1;
int n;
cl(int n):n(n) { ++s; s1 = s; cout << "basic constructor " << s1 << "\n"; }
cl(const cl& nn):n(nn.n) { ++s; s1 = s; cout << "const copy " << s1 << "\n"; }
explicit operator int() { return n; }
};
int main(){
cl a(cl(8));
}
Выводит базовый конструктор, как так получается, что преобразовывает в число? и почему обычный конструктор не срабатывает при создании временного объекта?
Ответы (1 шт):
Автор решения: Komdosh
→ Ссылка
Return Value Optimization
При компиляции код
cl a(cl(cl(cl(8))));
просто будет оптимизирован до cl a(8);, так как эти временные значения не сохраняются
Конструктор копирования будет вызван при сохранении ссылок на оба объекта
int main(){
cl a(cl(8));
cl b = a; // copy
}