Nie mogę zrozumieć, dlaczego w następnym kawałku kodu, zdefiniowany kopia constuctor nie drukuje ...C++ Kopiuj Konstruktor Oddity
#include <iostream>
using namespace std;
class B {
static int count;
int data;
int id;
void print(const char* p)
{
cout <<p <<", "<<id <<", " << data << endl;
}
public:
B(int d=0)
{
data=d; id=++count; print("B(int)");
}
B(const B& a)
{
data=a.data; id=++count; print("B(cost B&)");
}
~B(){print("~B()");}
operator bool(){ return (bool)data;}
B operator+(int i){print("operator+"); return B(data+i);}
};
int B::count=0;
void main(){
B b(42);
B x=b+2;
bool z=b+1;
getchar();
}
spodziewałem się dostać wydruk konstruktora kopia z B x=b+2
ale to nie robi pokaż. Jakieś pomysły? Dzięki,
Wyjście:
B(int), 1, 42
operator+, 1, 42
B(int), 2, 44
operator+, 1, 42
B(int), 3, 43
~B(), 3, 43
Więc to optymalizacja wartość zwracana?
To prawdopodobnie usunięte. –
Jakiego kompilatora używasz? Jeśli obsługuje C++ 11, powinieneś mieć zdefiniowany konstruktor ruchu - patrz Zasada pięciu. –
Zobacz [copy elision] (http://en.wikipedia.org/wiki/Copy_elision). – juanchopanza