2012-02-06 16 views
7

Mam nadzieję, że to pytanie dotyczy tematu.Jaki jest prawidłowy termin zwracania czegoś jako parametru wyjściowego?

robiłem przegląd kodu i natknęliśmy się na następujących funkcji:

bool SomeFunc(std::string& o_xxx, char& o_yyy); 

Ta funkcja służy do pobierania wartości xxx i yyy jakiejś klasie za pomocą spośród parametrów.

Komentarze (które są później wykorzystywane do automatycznego dokumentacji) powiedzieć:

... to funkcja powraca przez odniesienia [xxx] i [yyy] ...

Oczywiście funkcja zwraca wartość boolowską wskazującą powodzenie lub niepowodzenie. Tak więc powyższe zdanie wymaga ponownego sformułowania. Ale jak? Jaki jest poprawny termin (jeśli w ogóle istnieje) dla zwracania czegoś, jak gdyby za pomocą parametru out, lub, innymi słowy, zapełniania argumentu przekazanego przez referencję?

Pytanie jest oznaczone jako agnostyczne, ponieważ nie jest specyficzne dla C++. Ale jest również oznaczony jako C++, ponieważ przykład znajduje się w C++.

+1

ja zwykle powiedzieć coś do skutku „funkcja zwraca wartość wskazującą sukces lub niepowodzenie w przypadku powodzenia' będzie o_xxx' mają. wartość [xxx] i "o_yyy" będą miały wartość [rrr], aw przypadku niepowodzenia argumenty pozostają niezmienione. ". –

+1

Parametry wyjściowe są czasem używane, ponieważ istnieje więcej niż jeden parametr do zwrócenia. Jeśli połączysz je w klasę, możesz po prostu zwrócić instancję. Czasami parametry wyjściowe są jednak wykorzystywane do zwiększenia wydajności. Na koniec, dlaczego przekazujesz dane dookoła? Encapsulate: powiedz, nie pytaj! –

+0

@ R.MartinhoFernandes: "W przypadku niepowodzenia, argumenty pozostają bez zmian" - i zauważ, że jest to silna gwarancja wyjątku.Więc jeśli tak powiesz, pamiętaj, aby przypisać 'o_xxx' w funkcji * przed * przypisaniem do' o_yyy', ponieważ przypisanie ciągu jest tym, które może zawieść. Lub użyj swapów. –

Odpowiedz

8

"Po sukcesie SomeFunc sklepów w o_xxx i o_yyy wartości ..."; sklepów w jest, jak Linux manpage strtoul(3) opisuje, co ta funkcja ma z jego argumentem endptr.

Chociaż często słyszałam zwrot "wróć do" z parametrami wypisanymi referencyjnie.

+0

Dzięki! Ma sens, podoba mi się to! –

1

W najprostszych słowach:

Funkcja SomeFunc()możemodyfikować parametry xxx(std::string) i yyy(char) i zwraca sukces lub niepowodzenie (bool).

+0

Należy zauważyć, że nie jest to (w terminach .NET) parametr 'ref'. To jest parametr "out" –

1

Rozważmy sposób MSDN. Example.

Wartość powrotna jest opisana w oddzielnej sekcji.
Manipulacje z parametrami wyjściowymi opisano we własnych sekcjach i opcjonalnie można je powtórzyć w sekcji Wartość zwracana.

1

Jeśli używasz doxygen, to zrobi:

/** 
*- Description : This function ... 
* 
* @param[out] xxx ... 
* @param[out] yyy ... 
* 
* @return true for ..., false otherwise 
* 
***********************************************************************/ 
+2

'@param [out]' '@param [in]' –