2010-12-10 42 views
0

Je sais qu'il ya une réponse à la page suivante, mais je ne peux pas l'ouvrir dans mon pays ... donc, quelqu'un assez aimable pour copier-coller ici. Merci à l'avanceComment changer les arguments par défaut dans C++

http://cpptruths.blogspot.com/2005/07/changing-c-function-default-arguments.html

+3

Je sympathise, mais ce n'est pas ce que stackoverflow est pour. – Beta

+0

@Beta Bien que par conséquent cette page se classe plus haut que le lien, alors .. – OJFord

Répondre

2

Copie http://cpptruths.blogspot.com/2005/07/changing-c-function-default-arguments.html

En C++, les arguments par défaut des fonctions de portée globale peuvent être modifiés facilement.

En règle générale, nous utilisons une expression constante comme argument par défaut. C++ supporte les variables statiques ainsi qu'une expression constante pour un argument par défaut. Nous pouvons également redéclarer une signature de fonction dans une nouvelle portée avec une valeur par défaut différente.

Les arguments par défaut sont implémentés en tant que variables statiques globales. Par conséquent, le même effet peut être obtenu si nous affectons une valeur différente à la variable statique. Le code suivant montre cette caractéristique intéressante.


#include 
#include 
#include 

static int para=200; 

void g(int x=para); // default argument is a static variable. 
void f(int x=7); // default argument implemented in terms of some static varible. 

int main(void) 
{ 
void f(int x=70); // redeclaring function ::f 

f(); // prints f70 

g(); // prints g200 
para=500; 
g(); // prints g500 

{ 
void f(int x=700); // redeclaring function f 
f(); // prints f700 
::g(); // prints g500 
} 

::f(); // prints f7 !!!! 
// Note that earlier f() call in the same scope gave us f70!! 
// This shows that :: (scope resolution operator) forces compiler to 
// use global declaration with global signature's default value. 

{ 
void g(int x=100); // redeclaring function g 
g(); // prints g100!!! 
std::cout << "para = " << para << std::endl; // prints para = 500 
// Note that though value of para is unchaged local scope 
// changes value of default argument. 
} 
::g(); // prints g500 
return 0; 
} 

void f(int x) 
{ 
std::cout << "f" << x << std::endl; 
} 

void g(int x) 
{ 
std::cout << "g" << x << std::endl; 
} 

En tant que ligne directrice de la programmation, si vous avez besoin de changer la valeur de l'argument par défaut, que ce soit par redelcaring la signature de la fonction ou la réaffectation de la variable statique, il vaut mieux faire pas un argument par défaut et garder un argument simple.

+0

Pour être complet, l'expression utilisée comme valeur par défaut peut aussi être un appel de fonction. Il peut s'agir à peu près d'une expression arbitraire, les limites étant principalement que certaines variables sont interdites (par exemple, locals, autres paramètres de la fonction, le mot clé 'this' ne peut pas être utilisé dans l'expression). –

+0

Je suis sûr que vous n'êtes pas autorisé à copier des entrées de blog comme ceci (surtout sans citer votre source: je ne pense pas que Sumant Tambe, l'auteur original, apprécierait). –

+0

@Luc Touraille, je crois que tu as raison! Merci pour le commentaire. J'ai ajouté le copyright. –

0

L'essentiel de celui-ci:

1) Mettre en place un static variable non const.

2) Définissez l'argument par défaut à la valeur de cette variable.

3) Modifier la valeur de la variable.