Yoda Condizioni e la promozione intero
-
04-10-2019 - |
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
)?
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.