Problem mit Default Parameter

#1532069
Lesenswert?

Hi Leute,

Irgendwie habe ich mich gerade selbst verwirrt und blicke nicht mehr 
wirklich durch.
1
#include <iostream>
2
using namespace std;
3

4
int foo(int value=0)
5
{
6
    static int val=0;
7
    val=value;
8
    return val;
9
}
10

11
int main(void)
12
{
13
  
14
    foo(1);
15
    cout<<foo()<<"\n";
16
    cin.get();
17
}
Das ist der Code. Meiner Meinung nach müsste die Ausgabe 1 sein. Es 
müsste doch eine 1 übergeben werden und trotzdem ist das Ergebnis 0. 
Desweiteren habe ich nicht verstanden wieso ich die Funktion foo nicht 
mit int foo(1) aufrufen konnte. Ich habe gerade selbst den Überblick 
verloren.
Gast #1532106
Lesenswert?

Erste Version:
1
...
2
/* Rufe foo() mit Argument 1
3
--> Setze statische Variable in foo() auf 1 */
4
foo(1);
5

6
/* Rufe foo() ohne Argumente
7
--> Standardargument wird verwendet
8
--> Setze statische Variable in foo() auf 0 */
9
cout << foo() << endl;
10
...
Gast #1532120
Lesenswert?

... Hast du schonmal nen Debugger gesehn?
Zweite Version:
1
...
2
/* Rufe foo() mit Argument 3
3
--> '3' ist nicht gleich '0'
4
--> Merke '3' in der statischen Variablen
5
--> Gib den gerade gemerkten Wert zurück */
6
foo(3)
7

8
/* Rufe foo() ohne Argumente
9
--> Nimm '0', also das Standardargument
10
--> '0' ist gleich '0', also merke nichts
11
--> gib den irgendwann mal gemerkten Wert zurück
12
--> der ist '3' vom vorigen Ruf, also drucke '3' */
13
cout << foo() << endl;
14
...
#1532127
Lesenswert?

Ah ja ich habe es jetzt verstanden danke :D Natürlich foo wird mit 3 
aufgerufen. Das IST ungleich 0 also erhält val=3. Das merkt er sich. 
Beim cout Aufruf wird es standardgemäß, also mit 0, aufgerufen, aber da 
die Variable sich den Wert gemerkt hat wird eine 3 ausgegeben. 
Dankeschön :)

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren