2017-12-09 7 views
1

Wenn ein Zeiger an eine Funktion für schreibgeschützte übergeben wird, dann ist dieser Zeiger ein IN-Parameter.Ist das ein In oder In/Out-Parameter? Doxygen, C++

Wenn ein Zeiger an eine Funktion nur zum Lesen übergeben wird, aber diese Funktion eine Kopie des Zeigers erstellt, um in modulbezogenen Funktionen für schreibgeschützte Operationen darauf zugreifen zu können, ist dieser Zeiger immer noch IN.

Wenn die Funktion den Zeiger immer noch als schreibgeschützt verwendet, aber die anderen modulbezogenen Funktionen den Zeiger für Schreiboperationen verwenden, was macht das den Zeiger? Ein IN-Parameter, aber ohne const? Ein Ein-/Aus-Parameter?

Beispiel von dem, was ich meine:

class SteeringWheel { 
     public: float rotation; 
     public: SteeringWheel(void) { 
       this->rotation = 0.f; 
     } 
}; 

class Car { 
     private: SteeringWheel *steeringWheel; 
     public: 

     /** 
     * @param[?] steeringWheel Is the steering wheel in or in/out? 
     */ 
     Car (SteeringWheel *steeringWheel) { 
       this->steeringWheel = steeringWheel; 
     } 

     /** 
     * @param[in] degree Steering amount in degrees. 
     */ 
     void steer(float degree) 
     { 
       this->steeringWheel->rotation += degree; 
     } 
}; 

int main(int argc, char **argv) 
{ 
     SteeringWheel steeringWheel(); 

     /* car() uses steeringWheel as read only. */ 
     Car car(&steeringWheel); 

     /* steer() uses steeringWheel from car() to write. */ 
     car.steer(50.f); 

     return 0; 
} 

Antwort

0

Ich glaube, dass die in und out Bezeich bedeuten nicht genau das, was Sie denken. Von den Doxygen documentation of the param tag:

Der \ param Befehl hat ein optionales Attribut, (dir), die Richtung des Parameters angibt. Mögliche Werte sind "[in]", "[in, out]", und "[out]", beachten Sie die [eckigen] Klammern in dieser Beschreibung. Wenn ein Parameter eingegeben und ausgegeben wird, wird [in, out] als Attribut verwendet.

Die Richtung des Parameters bedeuten der Regel die folgenden:

  • in: Der Parameter in der Funktion als Eingabe eingespritzt wird, aber nicht geschrieben.
  • out: Der Parameter wird in die Funktion eingefügt, aber nicht als Eingabe. Es wird vielmehr von der Funktion beschrieben.
  • in, out: Der Parameter wird in die Funktion als Eingabe eingefügt und schließlich von der Funktion geschrieben.

In Ihrem Beispiel:

/** 
* @param[?] steeringWheel Is the steering wheel in or in/out? 
*/ 
Car (SteeringWheel *steeringWheel) { 
    this->steeringWheel = steeringWheel; 
} 

Ich denke, die steeringWheel Parameter in ist, weil Sie es spritzen und es in Ihrer Methode verwenden. Sie schreiben jedoch nie (d. H. An den Parameter selbst), also ist es nicht out. Mit anderen Worten, Sie verwenden Ihre Methode nur, um Ihrer Funktion eine Adresse hinzuzufügen, sonst nichts. Dasselbe gilt für Ihre zweite Methode, bei der Sie den Parameter degree injizieren, aber niemals darauf schreiben.

Um ein bisschen mehr über die Bedeutung von in und out, hier zu klären ist ein Beispiel für einen out Parameter:

/** 
* @param[out] p_param We write to the parameter! 
*/ 
void makeFour(int * p_param) 
{ 
    p_param = new int; // Out because of this line! 
    *p_param = 4; 
} 

Beachten Sie, dass wir einen neuen Wert direkt in den Parameter zu schreiben. Dies ist die Bedeutung von out: Information kommt durch den Parameter aus der Methode heraus. Sie können jetzt schreiben:

int main() 
{ 
    int myInt = 0; 
    std::cout << myInt; // prints 0. 

    void makeFour(&myInt); // p_param == &myInt here. 
    std::cout << myInt; // prints 4: the method wrote directly 
          // in the parameter (out)! 

    delete myInt; 

    return 0; 
} 

Hoffe, das hilft!

Verwandte Themen