Ich ändere eine alte Routine, die einen Integer-Parameter verwendet, so dass es jetzt eine Const-Referenz auf ein Objekt nimmt. Ich hatte gehofft, dass der Compiler mir sagen würde, von wo aus die Funktion aufgerufen wird (weil der Parametertyp falsch ist), aber das Objekt hat einen Konstruktor, der einen Integer nimmt, so dass der Compiler, anstatt zu scheitern, ein temporäres Objekt erstellt, ihm den Integer übergibt und eine Referenz darauf an die Routine weitergibt. Beispiel-Code:
class thing {
public:
thing( int x ) {
printf( "Creating a thing(%d)\n", x );
}
};
class X {
public:
X( const thing &t ) {
printf( "Creating an X from a thing\n" );
}
};
int main( int, char ** ) {
thing a_thing( 5 );
X an_x( 6 );
return 1;
}
Ich möchte die X an_x( 6 )
Zeile nach nicht kompilieren denn es gibt keine X
Konstruktor, der eine int
. Aber es kompiliert, und die Ausgabe sieht so aus:
Creating a thing(5)
Creating a thing(6)
Creating an X from a thing
Wie kann ich die thing( int )
Konstruktor, aber das temporäre Objekt nicht zulassen?