Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[C++] Jak zwrócić "nic"

Ostatnio zmodyfikowano 2013-05-27 18:25
Autor Wiadomość
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:
C/C++
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" ?
P-84087
kubawal
» 2013-05-27 17:17:48
To nie javascript, że se można nulla zwrócić :)
Wyjątki. try...throw...catch
P-84088
m4tx
» 2013-05-27 17:24:13
A może tak?
C/C++
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... :)
P-84089
unimator
» 2013-05-27 17:25:07
C/C++
return NULL;
Tylko trzeba pamiętać, by nie próbować odwoływać się do takiego "obiektu".
P-84090
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.
P-84091
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.
P-84092
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.
P-84096
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:

C/C++
boost::optional < mnStruct > getStruct( int a, int b )
{
    mnStruct myStruct;
    myStruct.a1 = 1;
    return boost::make_optional( a > b, myStruct );
    // return (a > b) ? (boost::optional<mnStruct>(myStruct)) : (boost::optional<mnStruct>());
}
P-84097
« 1 » 2
  Strona 1 z 2 Następna strona