[C++] Jak zwrócić "nic"
Ostatnio zmodyfikowano 2013-05-27 18:25
kill Temat założony przez niniejszego użytkownika |
[C++] Jak zwrócić "nic" » 2013-05-27 17:14:48 Witam,
mam takie pytanie może banalne jak zwrócić nic, tj mam kod np:
mnStruct getStruct( int a, int b ) { mnStruct myStruct; myStruct.a1 = 1; if( a > b ) { return myStruct } }
Program się niby kompiluje ale nie jest dobrą praktyką zostawiać tak funkcje samą sobie.
Tak więc jak w takim wypadku zwrócić "nic" ? |
|
kubawal |
» 2013-05-27 17:17:48 To nie javascript, że se można nulla zwrócić :) Wyjątki. try...throw...catch
|
|
m4tx |
» 2013-05-27 17:24:13 A może tak? mnStruct * getStruct( int a, int b ) { mnStruct * myStruct = new mnStruct(); myStruct->a1 = 1; if( a > b ) { return myStruct; } else { return NULL; } } Pewnym utrudnieniem jest tutaj konieczność użycia wskaźników. EDIT: @pekfos - fixed. Trzeba teraz jeszcze dodatkowo pamiętać o zwolnieniu zaalokowanej pamięci... :) |
|
unimator |
» 2013-05-27 17:25:07 Tylko trzeba pamiętać, by nie próbować odwoływać się do takiego "obiektu". |
|
kubawal |
» 2013-05-27 17:26:41 No właśnie po to są w języku c++ wyjątki, żeby móc unikać takiego kodu. |
|
pekfos |
» 2013-05-27 17:27:22 Pewnym utrudnieniem jest tutaj konieczność użycia wskaźników. |
A dodatkowym utrudnieniem jest fakt, że zwracasz adres zmiennej lokalnej. |
|
kill Temat założony przez niniejszego użytkownika |
» 2013-05-27 17:59:52 Dzięki, właśnie tak kombinowałem tyle że w programie jest to trochę bardziej namieszane i nie wiedziałem czy w dobrym kierunku zmierzam. |
|
Elaine |
» 2013-05-27 18:07:57 Właśnie po to istnieje boost::optional, a w C++14 będzie bazowany na nim std::optional: boost::optional < mnStruct > getStruct( int a, int b ) { mnStruct myStruct; myStruct.a1 = 1; return boost::make_optional( a > b, myStruct ); } |
|
« 1 » 2 |