Das C ++ Programm
%Vor%ergibt einen Fehler: keine Übereinstimmung für 'operator *' in 'z * n'. Warum?
Ich kompiliere mit g ++ 4.4.1. Vielleicht folgt der Compiler nur dem C ++ - Standard. In diesem Fall lautet meine Frage: Warum lässt der Standard das nicht zu?
Das funktioniert:
%Vor%Da der Komplex aus Doppelzahlen besteht, multipliziert er sich mit Doppelpunkten. Blick auf die Erklärung:
%Vor% (Das Folgende ist dank dribeas ) Der Compiler darf keine impliziten Typkonvertierungen während der Vorlagenableitung vornehmen indem ein complex
übergeben wird, wobei T double
ist, und dann ein anderes T int
ist, wenn versucht wird, die Funktion T as double
bewirkt, dass das zweite Argument nicht übereinstimmt und umgekehrt.
Für was Sie arbeiten möchten, müsste es eine Funktion haben, die ähnlich wie folgt definiert ist:
%Vor% Dies ermöglicht der Funktion, unterschiedliche Typen zu verwenden, wodurch die Umwandlung beim Aufruf von operator*=
ermöglicht wird.
std::complex<T>
definieren andere complex<T>
-Instanzen als Argumente. Die Route von einem int
über ein double
zu einem complex<double>
ist für die C ++ - Sprache nur geringfügig zu verzerrt / verdreht, um sie dem Standard zu folgen (und mit den enormen Komplikationen, die bereits durch Freilaufkonversionen und -kohären entstehen) Es ist schwer, diesen Aspekt des Standards zu kritisieren. Ich schätze, der super-spezielle Fall, dass complex<double>
uncasted int
s als Operanden für seine Operatoren erlaubt, wurde einfach nicht als häufig und wichtig genug angesehen, um Spezialisierungen für diesen extrem individuellen Fall zu spezifizieren, wenn man bedenkt, wie einfach es für den Programmierer ist um die int
auf double
zu transformieren, wenn sie das eigentlich wollen ! -)
Tags und Links c++ complex-numbers