Fast richtig.
Der Compiler schreibt natürlich alles in Maschinencode um, aber während der Laufzeit werden die Abfragen, afaik, übersprungen, macht dein Programm also beim Ausführen schneller (theoretisch, und dann auch nur ein gaaaaanz kleines bisschen).
EDIT:
Wurde grad im Chat nochmal darauf aufmerksam gemacht:
Mach dir klar, dass es hier nicht nur um Geschwindigkeit geht (bzw. bei heutigen Rechnern gar nicht mehr), sondern um die Ausführung des Codes.
Wenn du z.B. Funktionen schreibst, die je nach Erfolg einen Boolean-Wert zurückgeben, dann musst du aufpassen was du tust.
Solche Funktionen wirst du z.B. bei Engines finden, die bei Fehlern false rauswerfen.
Beispiel:
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
int main() {
int zahl1 = 10;
int zahl2 = 5;
if(FunktionEins()) {
//..
}
if(FunktionZwei(&zahl1, &zahl2)) {
//..
}
std::cout << zahl1;
return 0;
}
bool FunktionEins() {
//..
return true;
}
bool FunktionZwei(int *zahl1, int *zahl2) {
*zahl1 += *zahl2;
return true;
}
|
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
int main() {
int zahl1 = 10;
int zahl2 = 5;
if(FunktionEins()) {
//..
}
else if(FunktionZwei(&zahl1, &zahl2)) {
//..
}
std::cout << zahl1;
return 0;
}
bool FunktionEins() {
//..
return true;
}
bool FunktionZwei(int *zahl1, int *zahl2) {
*zahl1 += *zahl2;
return true;
}
|
Im ersten Codebeispiel bekommst du in der Konsole eine 15, im zweiten Beispiel eine 10.
Wieso? Weil im ersten jede Abfrage bearbeitet wird, im zweiten aber die zweite übersprungen wird, weil die erste ja schon wahr ist.