Beachten Sie Folgendes:Standardparameter in C++
int foo(int x , int z = 0);
int foo(int x, int y , int z = 0);
Wenn ich diese Funktion wie so nennen:
foo(1 , 2);
Wie weiß der Compiler, welche zu benutzen?
Beachten Sie Folgendes:Standardparameter in C++
int foo(int x , int z = 0);
int foo(int x, int y , int z = 0);
Wenn ich diese Funktion wie so nennen:
foo(1 , 2);
Wie weiß der Compiler, welche zu benutzen?
Es wird nicht und daher wird dieses Beispiel nicht sauber kompilieren, es wird Ihnen einen Kompilierungsfehler geben.
Es wird Ihnen einen mehrdeutigen Funktionsaufruffehler geben.
int foo(int x , int z = 0){return 0;}
int foo(int x, int y , int z = 0){return 10;}
int main()
{
foo(1 , 2);
return 0;
}
Ausgang:
prog.cpp: In function ‘int main()’:
prog.cpp:6: error: call of overloaded ‘foo(int, int)’ is ambiguous
prog.cpp:1: note: candidates are: int foo(int, int)
prog.cpp:2: note: int foo(int, int, int)
Es nicht, deshalb erhalten Sie einen Compiler-Fehler.
Compiler wird mehrdeutige Funktion Überlastung melden. Da Sie nicht herausfinden können, welche Funktion b aufgerufen wird, tut der Compiler
Das ist eine nette Frage. Aber es wird wegen ambivalent Anruf foo()
nicht kompilieren. Sie können diese Mehrdeutigkeit entfernen, indem Sie unterschiedliche Datentypen in der Funktionssignatur verwenden.
Für weitere Einzelheiten über Standardparameter und Funktion Überlastung siehe http://www.smart2help.com/e-books/ticpp-2nd-ed-vol-one/Chapter07.html