Почему конструктор копирования здесь не вызывается?
Для следующего кода:
#include<iostream>
using namespace std;
class Test
{
public:
Test(const Test &t) { cout<<"Copy constructor called"<<endl;}
Test() { cout<<"Constructor called"<<endl;}
};
Test fun()
{
cout << "fun() Called\n";
Test t;
return t;
}
int main()
{
Test t1;
Test t2 = fun();
return 0;
}
Я действительно запутался относительно того, когда вызывается конструктор копирования? Например, если я запускаю вышеупомянутую программу, конструктор копирования не вызывается. Это означает, что если я испорчу параметры, переданные конструктору копирования (исключая ключевое слово const), он не должен показывать ошибки компилятора. Но его показ
"нет соответствующей функции для вызова 'Test :: Test (Test)'"
Кроме того, fun () возвращает объект типа test, который создается во время выполнения fun (). Почему конструктор копирования здесь не вызывается?
int main()
{
fun();
return 0;
}
также, если я делаю следующие изменения в основной функции, почему конструктор копирования вызывается только один раз, а не дважды?
int main()
{
Test t2 = fun();
Test t3 = t2;
return 0;
}