2015-12-24 1 views
0

Puis-je utiliser null ou nullptr comme valeur bool au lieu de 0/false?
Depuis déclarer un bool comme null signifie que la valeur bool est réellement zero/false et cela ne fonctionne pas dans mon cas. J'utilise zero/false comme autre résultat possible. Je voudrais avoir une valeur booléenne qui peut être 'inexistante' (ni vraie ni fausse).Déclarer une variable booléenne comme NULL dans C++

+3

Vous voulez utiliser un type qui a deux valeurs possibles pour représenter plus de deux valeurs possibles. Cela semble que ça va finir en larmes. Utilisez un type différent qui peut représenter toutes les valeurs qui vous intéressent. –

+0

http://thedailywtf.com/articles/What_Is_Truth_0x3f_ –

Répondre

0

Si vous pouvez utiliser coup de pouce dans votre projet, puis boost::optional est pour vous. Cela fonctionne comme Maybe de Haskell si vous êtes familier avec cela.

Des exemples simples d'utilisation (de http://www.boost.org/doc/libs/1_60_0/libs/optional/doc/html/boost_optional/examples.html):

// return values 
optional<char> get_async_input() 
{ 
    if (!queue.empty()) 
     return optional<char>(queue.top()); 
    else return optional<char>(); // uninitialized 
} 

void receive_async_message() 
{ 
    optional<char> rcv ; 
    // The safe boolean conversion from 'rcv' is used here. 
    while ((rcv = get_async_input()) && !timeout()) 
     output(*rcv); 
} 

// local variables 
optional<string> name ; 
if (database.open()) 
{ 
    name = database.lookup(employer_name) ; 
} 
else 
{ 
    if (can_ask_user) 
     name = user.ask(employer_name) ; 
} 

if (name) 
    print(*name); 
else print("employer's name not found!");