Domanda

domanda strana, ma qualcuno mi ha mostrato questo, Mi chiedevo si può utilizzare il no! operatore int in C ++? (Il suo strano per me).

#include <iostream>
using namespace std;

int main()
{
   int a=5, b=4, c=4, d;
   d = !( a > b && b <= c) || a > c && !b;
   cout << d;
   system ("pause");
   return 0;
}
È stato utile?

Soluzione

Sì. Per i tipi integrali, i rendimenti ! true se l'operando è pari a zero, e false altrimenti.

Quindi, !b qui significa semplicemente b == 0.


Questo è un caso particolare in cui un valore viene convertito in un bool. Il !b può essere visto come !((bool)b) quindi la domanda è: che cosa è la "truthness" di b. In C ++, tipi aritmetici, tipi di puntatore e enum possono essere convertiti in bool. Quando il valore è 0 o nullo, il risultato è false, altrimenti è true (C ++ §4.1.2).

Naturalmente le classi personalizzate possono anche sovraccaricare il operator! o operator << em> tipi possono essere convertito al bool > per consentire l'!b per le loro classi. Per esempio, std::stream ha sovraccaricato la operator! e operator void* per il controllo della failbit, in modo che idiomi come

while (std::cin >> x) {   // <-- conversion to bool needed here
  ...

può essere utilizzato.

(Ma il codice !( a > b && b <= c) || a > c && !b è solo criptico.)

Altri suggerimenti

In origine, in C (su cui C ++ si basa) non c'era nessun tipo booleano. Al contrario, il valore "vero" è stato assegnato a qualsiasi valore diverso da zero e il valore "false" è stato assegnato a qualsiasi cosa che valuta a zero. Questo comportamento esiste ancora in C ++. Così, per un int x, le espressioni !x mezzi "x non è vero", che è "x non diverso da zero", vale a dire se è vero x è pari a zero.

È possibile, !b è equivalente a (b == 0).

Il test int è vero per i non-valori zero e falso per i valori zero, quindi non è solo vero per i valori zero e falso per valori diversi da zero.

La build-in operatore ! Converte il suo argomento bool. Previsto dalla norma che esiste una conversione da qualsiasi tipo aritmetico (int, char, .... float, double ...) per bool . Se il valore di origine è 0 il risultato è true, altrimenti è false

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top