Domanda

Quando si confrontano un tipo più grande di int, con una costante intera, devo posizionare la costante a sinistra o destra per assicurare la corretta comparazione viene eseguita?

int64_t i = some_val;
if (i == -1)

o dovrebbe essere:

if (-1 == i)

Ci sono delle circostanze in cui entrambi i casi non è identico a confronto con -1LL (dove int64_t è long long)?

È stato utile?

Soluzione

Non importa se lo metti sul lato destro o sul lato sinistro; l'operatore == è completamente simmetrico.

Se entrambi gli operandi all'operatore == hanno tipo aritmetico, come in questo caso, quindi le "solite conversioni aritmetiche" vengono applicati (C99 §6.5.9). In questo caso, la regola che si applica è:

  

Se entrambi gli operandi hanno firmato tipi interi o entrambi hanno firmato   integer tipi, l'operando con il tipo di minore intero rango conversione   convertito al tipo di operando con maggiore rango. (C99 §6.3.1.8)

Così il -1 viene convertito in int64_t. -1LL non fa alcuna differenza.

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