001
12.11.2011, 15:32 Uhr
0xdeadbeef
Gott (Operator)
|
Bei
läuft der Compiler in das Problem, dass A keinen operator= hat, der int entgegen nimmt; automatisch generiert wird lediglich ein operator=(A const &). Da A aber einen nicht-expliziten Konstruktor hat, der int entgegen nimmt, kann er diesen benutzen, wenn er die 10 vorher in ein Objekt vom Typ A umwandelt. Effektiv wird daraus also
auf die selbe Art und Weise, wie es bei
C++: |
void foo(A const &a) { ... }
// ...
foo(10);
|
der Fall wäre. Dieser Mechanismus existiert, weil es ziemlich anstrengend wäre, jedes mal
C++: |
void foo(std::string const &s) { ... }
foo(std::string("bar")); // statt foo("bar");
|
etc. zu schreiben.
Dementsprechend wird da ein temporäres Objekt vom Typ A erstellt und gleich wieder zerstört, und das ist es, was du in der Ausgabe siehst. -- Einfachheit ist Voraussetzung für Zuverlässigkeit. -- Edsger Wybe Dijkstra Dieser Post wurde am 12.11.2011 um 15:33 Uhr von 0xdeadbeef editiert. |