2017-12-09 28 views
1

포인터가 읽기 전용 함수로 전달되면이 포인터는 IN 매개 변수입니다.in 또는 out 매개 변수입니까? Doxygen, C++

포인터가 읽기 전용으로 함수에 전달되었지만이 함수는 읽기 전용 연산에 대한 모듈 관련 함수에서 포인터의 복사본에 액세스 할 수 있도록 허용하지만이 포인터는 여전히 IN입니다.

함수가 여전히 포인터를 읽기 전용으로 사용하지만 다른 모듈 관련 함수가 포인터를 쓰기 작업으로 사용하는 경우 포인터로 무엇을 만드나요? IN 매개 변수는 있지만 const는 없습니까? 입력/출력 매개 변수? 무슨 뜻인지의

예 :

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

답변

0

나는 inout 지정자 정확히 당신이 무슨 생각을 의미하지 않는다 있다고 생각합니다. Doxygen documentation of the param tag에서 :

의 \ PARAM 명령은 매개 변수의 방향을 지정, 선택적 속성 (DIR)가 있습니다. 가능한 값은 "[in]", "[in, out]", 및 "[out]"이며,이 설명에서 [대괄호]를 참고하십시오. 매개 변수가 모두 입력 및 출력 인 경우 [in, out]이 특성으로 사용됩니다.

파라미터의 방향은 일반적으로 다음을 의미한다 :

  • in를 다음 파라미터는 입력으로서 기능에 주입되지만 기록되지 않는다.
  • out : 매개 변수는 함수에 삽입되지만 입력으로는 삽입되지 않습니다. 오히려 함수에 의해 작성됩니다.
  • in, out : 매개 변수는 함수에 입력으로 주입되고 결국 함수에 의해 기록됩니다. 당신의 예에서

는 :

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

나는 당신이 그것을 주입하고 방법을 사용하기 때문에 steeringWheel 매개 변수 in 생각합니다. 그러나 매개 변수 자체에 쓰는 일은 결코하지 않으므로 out이 아닙니다. 즉, 함수에 주소를 삽입하기 위해서만 메소드를 사용합니다. degree 매개 변수를 삽입했지만 결코 쓰지 않는 두 번째 방법에도 똑같이 적용됩니다. 우리는 매개 변수에 직접 새 값을 쓰기

/** 
* @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; 
} 

주의 사항 :

inout의 의미에 좀 더 명확히하기 위해, 여기에 out 매개 변수의 예입니다. 이것은 out의 의미입니다 : 매개 변수를 통해 메소드의 정보가 나옵니다. 이제 다음과 같이 쓸 수 있습니다 :

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

희망이 있습니다.