Для следующего кода:Почему здесь не вызывается конструктор копирования?
#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 (тест)"
Кроме того, удовольствие() возвращает объект испытания типа, который создается во время fun(). Почему конструктор копирования здесь не называется?
int main()
{
fun();
return 0;
}
также, если я делаю следующие изменения в основной функции, почему конструктор копирования вызывается только один раз, а не дважды?
int main()
{
Test t2 = fun();
Test t3 = t2;
return 0;
}
возможно дубликат [Почему конструктор копирования не вызывается в этом коде] (HTTP: // StackOverflow .com/questions/7779827/why-is-copy-constructor-not-being-called-in-this-code) –
Конструктор копирования вызывается как ожидается на VC++ 2013 RC. – xmllmx
@xmllmx: Даже в режиме выпуска? Потому что этого на самом деле не следует ожидать, если на современном компиляторе с оптимизацией. –