Я уверен, мне не хватает простой вещи здесь,Невозможно вызвать конструктор копирования
Я не не в состоянии вызвать конструктор копирования в коде. В чем причина?
Является ли компилятор оптимизирующим мой код?
#include<iostream>
using namespace std;
class Test
{
public:
int x;
Test(){
x=100;
cout << "Test() Called\n";
}
Test(const Test &t) {
this->x=t.x;
cout << "Test-Copy() Called\n";
}
};
Test fun()
{
cout << "fun() Called\n";
Test t;
return t;
}
int main()
{
Test t1;
Test t2 = fun();
cout<<t2.x<<endl;
return 0;
}
RVO - оптимизация возвращаемого значения. Функция 'fun()' возвращает временное значение rvalue и, следовательно, возможно, компилятор вызывает конструктор перемещения вместо конструктора копирования. – Vishal
не конструктор перемещения, я попытался переместить конструктор –
@Vishal, когда происходит RVO, не вызывается ни движение, ни конструктор копирования. Кроме того, не существует неявного механизма перемещения, потому что есть объявленный пользователем конструктор копирования. –