Nel libro programmazione generica e STL (edizione cinese), si dice:costruttore o copia costruttore?
X x = X()
chiamerà il costruttore di copia.
Sembra un po 'strano per me. E scrivo un programma di test come questo
#include <iostream>
class Test {
public:
Test() {
std::cout << "This is ctor\n";
}
Test(const Test&) {
std::cout << "This is copy-ctor\n";
}
};
int main(int argc, char** argv)
{
Test t = Test();
return 0;
}
L'uscita è "Questo è ctor". ok, ora sono confuso, che è giusto?
In gcc, potrebbe essere necessario utilizzare '-fno-elide-constructors', poiché anche' -O0' non impedisce l'elision, penso. –
@Kerrek: Grazie! –
La copia può essere eliminata anche quando non è * banale *, la copia viene eliminata costruendo il provvisorio al posto della variabile locale. La complessità dell'oggetto o della copia è irrilevante per tale ottimizzazione. –