scooter010
Commander Pro
- Registriert
- Sep. 2014
- Beiträge
- 2.831
Ich bin grade an einer kleinen Übung und kann folgenden Zusammenhang nicht nachvollziehen.
Erwartetes Verhalten:
Beim Aufruf der jeweiligen Funktion wird jeweis erst der am weitestens links stehende Parameter ermittelt und nach rechts abgearbeitet.
Beobachtetes Verhalten:
Im 2. case entspricht das beobachtete Verhalten dem erwartetem Verhalten.
Im 5. case weicht das Verhalten von der Erwartung ab, es wird zuerst der Rechte Funktionsparameter ermittelt und somit entsprechend der Funktion von gv() beim Nutzer abgefragt und anschließend der Linke Parameter
Fragestellung:
Warum tritt dieses Verhalten auf?
Kann ich irgendwie steuern, welcher Funktions-Parameter zuerst ermittelt werden soll, ohne die Ermittlung der Parameter in separate Variablen Zwischenspeichern zu müssen?
Ich habe ein paar Funktionen, die ich unter Visual Studio Community Version 2019 erstellt habe:
aufgerufen werden die Funktionen unterschiedlich.
C++:
double minus(double a, double b) {
return a - b;
}
int rest(int a, int b) {
if (b <= 0 || a < 0)
std::_Xout_of_range("Operanden außerhalb des zulässigen Bereiches");
return a % b;
}
int gv(int i, const (char*) message);
double gv(double d, const (char*) message);
/*
Beide gv() erzeugen eine Konselenabfrage (cin) und wandeln das Ergebnis entweder in einen int (stoi())
oder double (stod()) Rückagewert um. Variable i und d sind ungenutzt und dienen nur der
"Überladbarkeit" der Funktion, in dem je nach gewünschten Antwortwert ein mit einem beliebigen
Wert initialisierter int oder double mit übergeben wird.
*/
aufgerufen werden die Funktionen unterschiedlich.
C++:
double d = 0;
int i = 0;
//Mal so:
case '2':
std::cout << "Differenz: " << minus(gv(d,"Minuend"), gv(d,"Substrahend")) << std::endl;
error = 0;
break;
//Anderer Code
//Und dann mal so
case '5':
int f;
try {
f = rest(gv(i, "zu teilende Zahl"), gv(i, "Teiler"));
}
catch (const std::out_of_range & oor) {
std::cerr << "Fehler " << oor.what() << std::endl;
std::cout << "Program startet von vorne" << std::endl;
error = 1;
break;
}
std::cout << "Rest: " << f << std::endl;
error = 0;
break;
Erwartetes Verhalten:
Beim Aufruf der jeweiligen Funktion wird jeweis erst der am weitestens links stehende Parameter ermittelt und nach rechts abgearbeitet.
Beobachtetes Verhalten:
Im 2. case entspricht das beobachtete Verhalten dem erwartetem Verhalten.
Im 5. case weicht das Verhalten von der Erwartung ab, es wird zuerst der Rechte Funktionsparameter ermittelt und somit entsprechend der Funktion von gv() beim Nutzer abgefragt und anschließend der Linke Parameter
Fragestellung:
Warum tritt dieses Verhalten auf?
Kann ich irgendwie steuern, welcher Funktions-Parameter zuerst ermittelt werden soll, ohne die Ermittlung der Parameter in separate Variablen Zwischenspeichern zu müssen?