2010-12-10 7 views
0

Ich weiß, dass es eine Antwort in der folgenden Seite gibt, aber ich kann es in meinem Land nicht öffnen ... also, jemand freundlich genug, um es hier zu kopieren und einzufügen. Dank im VorausWie man Standardargumente in C++ ändert

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

+3

Ich sympathisiere, aber das ist nicht, wofür Stackoverflow ist. – Beta

+0

@Beta Obwohl diese Seite rangiert höher als die verknüpfte, also .. – OJFord

Antwort

2

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

In C++ Standardargumente der globalen Umfang Funktionen können leicht geändert werden.

In der Regel verwenden wir einen konstanten Ausdruck als Standardargument. C++ unterstützt sowohl statische Variablen als auch einen konstanten Ausdruck für ein Standardargument. Wir können auch eine Funktionssignatur in einem neuen Bereich mit einem anderen Standardwert neu deklarieren.

Standardargumente werden als globale statische Variablen implementiert. Daher kann derselbe Effekt erreicht werden, wenn der statischen Variable ein anderer Wert zugewiesen wird. Der folgende Code zeigt dieses interessante Feature.


#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; 
} 

Als Programmierrichtlinie, wenn Sie den Wert des Standardargument ändern müssen, entweder durch die Funktion Signatur oder Neuzuweisung von statischen Variablen redelcaring, Sie besser es kein Standardargument machen und behalte es für ein einfaches Argument.

+0

Der Vollständigkeit halber kann der Ausdruck als Standardwert auch ein Funktionsaufruf sein. Es kann so ziemlich ein beliebiger Ausdruck sein, die Grenzen sind hauptsächlich, dass bestimmte Variablen tabu sind (zum Beispiel Locals, andere Parameter der Funktion, das 'this' Schlüsselwort kann nicht im Ausdruck verwendet werden). –

+0

Ich bin mir ziemlich sicher, dass Sie Blogeinträge nicht wortwörtlich so kopieren dürfen (insbesondere ohne Ihre Quelle zu zitieren: Ich glaube nicht, dass Sumant Tambe, der ursprüngliche Autor, es begrüßen würde). –

+0

@Luc Touraille, ich glaube, du hast Recht! Danke für den Kommentar. Ich habe das Urheberrecht hinzugefügt. –

0

Der Kern davon:

1) Einrichten eines static, nicht const Variable.

2) Setzen Sie das Argument auf den Wert dieser Variablen als Standard.

3) Ändern Sie den Wert der Variablen.