I programmering er standardargumentet et funktionsargument , der er valgfrit, når det kaldes. I de fleste programmeringssprog kan funktioner tage et eller flere argumenter. Som regel skal alle argumenter angives fuldt ud (som i programmeringssproget C [1] ). Senere tillod nogle sprog (for eksempel C++ ) programmøren at angive værdierne af nogle argumenter i funktionserklæringen. Funktionen kunne således kaldes ved kun at sende de nødvendige argumenter.
Overvej følgende funktionserklæring:
int my_func ( int a , int b , int c = 12 );Denne funktion tager tre argumenter, hvoraf det sidste har en standardværdi på 12. Programmøren kan kalde denne funktion på to måder:
resultat = my_func ( 1 , 2 , 3 ); resultat = min_funktion ( 1 , 2 );I det første tilfælde bestemmes værdien af argumentet c i funktionskaldet og er lig med tre. I det andet tilfælde udelades det sidste argument, og c vil blive sat til tolv .
Standardargumenterne indstilles fra det sidste argument.
Standardargumentværdierne for virtuelle metoder bestemmes ikke på kørselstidspunktet af typen af objektet, men er taget fra markørens type. I dette eksempel vil konsolskærmen vise 1 Derived:
klasse Base { public : virtual void foo ( int x = 1 ) { std :: cout << x << "Base" ; } }; klasse Afledt : offentlig Base { public : void foo ( int x = 2 ) override { std :: cout << x << "Afledt" ; } }; int main () { Base * x = ny Afledt ; x -> foo (); // "1 Afledt" returnerer 0 ; }For medlemsfunktioner kan standardargumentværdier angives i definitionerne. Sådanne funktioner kan kun kaldes med standardværdier, hvis deres definition sker før opkaldet. Eksempel:
struktur C { void g ( int i , int j = 99 ); C ( int a ); }; C :: C ( int = 5 ) { } void C :: g ( int i = 88 , int j ) { }Nogle andre sprog, såsom Java , understøtter ikke standardargumenter. Denne adfærd kan dog reproduceres ved at bruge en metodeoverbelastning med samme navn og færre argumenter:
int MyFunc ( int a , int b ) { return MyFunc ( a , b , 12 ); } int MyFunc ( int a , int b , int c ) { /* hovedimplementering */ }For hvert funktionskald skal standardargumentværdier sendes til den kaldte funktion. Dette fører til gentagelser i koden. Standardargumenterne slipper for at undgå dette.
Hvis standardargumentet ikke kun er et bogstaveligt tal, men et udtryk, så kan dette udtryk evalueres én gang for hele programmet.
Python er bemærkelsesværdigt for det faktum, at det kun evaluerer udtryk i standardargumenter én gang under modulindlæsning. Hvis du ønsker at evaluere en værdi i hvert funktionskald, kan du tildele en signalværdi til argumentet (f.eks. Nonei Python) og derefter i den første linje af funktionen markere det.
For eksempel kan standardargumenter i Python implementeres sådan:
import datetime def f ( a , b = Ingen ): b = b eller datetime . datotid . nu ()