Frage

Ich habe eine Funktion, die die folgende tut:

  • Wenn die Funktion aufgerufen wird und einen echten Bool Wert übergeben, setzt er einen statischen Bool Wert auf true
  • Wenn die Funktion aufgerufen wird, und übergeben eine Zeichenfolge, wenn der statische Bool Wert auf true gesetzt ist, wird es etwas tun mit dieser Zeichenfolge

Hier ist meine Sorge - wird eine statische Variable gleich zwischen zwei überladenen Funktionen bleiben? Wenn nicht, kann ich einfach eine eigene Funktion erstellen entworfen Spur des Bool Wert zu halten, aber ich versuche, die Dinge einfach zu halten.

War es hilfreich?

Lösung

Nein, erstellt es zwei separate statische Variablen - eine für jede Funktion. Der Name einer C ++ Funktion op seine scheinbaren Namen und ihre Parametertypen hergestellt, und der Name der statisch ist (wenigstens konzeptionell) geheftet zu dem. Anstatt Add noch eine andere Funktion, können Sie die Variable statisch in Bezug auf die Klasse in Erwägung ziehen, die Funktionen enthalten, obwohl dies nicht, dass Sie genau das gleiche Verhalten nicht geben, oder es in einem anonymen Namespace platzieren:

namespace {
   int myvar = 0;
}

int f( bool b ) {
   return myvar;
}

int f( const string &  s  ) {
   return myvar;
}

Um die Funktionen Mitglieder einer Klasse zu machen:

// a.h
class A {
   public:
    static int f( bool b ) {
       return myvar;
    }

    static int f( const string &  s  ) {
       return myvar;
    }
  private:
     static int myvar;
};

// a.cpp
int A::myvar = 0;   

// main.cpp

#include <iostream>
#include <a.h>
int main() {
    std::cout << A::f(false) << A::f( string("foobar") ) << std::endl;   
}

Andere Tipps

Zwei überladene Funktionen sind zwei verschiedene Funktionen. Auch wenn jede Funktion eine static bool mit der gleichen Kennung enthält, gehören sie in verschiedenen Bereichen und die Kennung bezieht sich auf eine eindeutige Variable in jeder Funktion.

Wenn Sie Aktien Zustand müssen zwischen zwei Funktionen, die Sie sind wahrscheinlich besser dran, eine Klasse zu machen, diesen Zustand zu kapseln und machen die beiden Funktionen Elementfunktionen dieser Klasse.

Die Antwort ist nein. Es gibt keinen Grund es sein sollte, denn nach allem, was wir über zwei Funktionen sprechen.

Da ist es schon gezeigt worden, ich möchte den Kern der Sache befassen. static

stellt static globalen Zustand und globaler Zustand ist schlecht. Es führt zu subtilen Fehler, Schwierigkeiten Test richtig (da ein Test diejenigen, nachdem sie ausgeführt beeinflusst) und denken Sie nicht einmal über es multithreaded going ...

Deshalb würde ich wirklich fordert Sie dazu auf die static ganz zu vermeiden. Sie würden dann zwei Lösungen:

  • Erstellen Sie eine Klasse mit den beiden Überlastungen wie Methoden und speichern Zustand (nicht statisch, bitte)
  • Führen Sie den Bool als Parameter an die Methoden, out-Parameter für die Bool Überlastung und in-Parameter für die Zeichenfolge Überlastung

Pick-up je nachdem, was einfacher ist, zu erreichen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top