long long llIdx = foo();
if (llIdx > 0LL) // Can I use 0 here?
...
qualche problema se uso 0
invece di 0LL
nel codice di cui sopra?ci Confrontando molto lunga 0
Quando si preferisce 0LL
su 0
?
long long llIdx = foo();
if (llIdx > 0LL) // Can I use 0 here?
...
qualche problema se uso 0
invece di 0LL
nel codice di cui sopra?ci Confrontando molto lunga 0
Quando si preferisce 0LL
su 0
?
Sì, è possibile utilizzare un semplice 0
qui. Il compilatore guarderebbe il tipo di ogni argomento a >
e promuoverà quello più piccolo in modo che abbiano le stesse dimensioni.
Così llIdx > 0
e llIdx > 0LL
sono equivalenti.
"Il compilatore guarderebbe il tipo di ogni argomento a'> 'e promuoverà quello più piccolo in modo che abbiano le stesse dimensioni." Ecco perché non ho messo il mio commento come risposta. C'è un sacco di casi speciali se il segno di entrambi gli interi varia. – kay
Non ho visto il tuo commento mentre stavo scrivendo :) Stavo solo cercando di rispondere alla domanda specifica con un po 'più di "sì". E presumo tu intendessi "firma", non "segno" – kdopen
Quindi quando dovremmo usare '0LL' invece di' 0'? – Deqing
'long long' è un tipo' signed'. Non fa differenza se scrivi 'x> 0ll' o' x> 0', perché '0' viene automaticamente promosso a' long long'. – kay
http://stackoverflow.com/questions/13275136/which-initializer-is-appropriate-for-an-int64-t –
In realtà, la "firma" di "long long" non è rilevante per questo caso specifico. Se il confronto fosse 'llIdx> = 0' (o' 0LL') lo sarebbe, perché quel predicato sarebbe sempre vero per 'unsigned long long'. – kdopen