Ho un progetto in cui mi occupo di numeri grandi (ns-timestamp) che non rientrano in un numero intero. Voglio quindi usare per es. int64_t e sto attualmente scrivendo un caso di test (sì!).Definizione del valore intero grande
Per controllare il comportamento per gran numero, ho iniziato con qualcosa come
int64_t val = 2*std::numeric_limits<int>::max();
qDebug() << "long val" << val;
che restituisce
long val -2
(come se mi definisco val come int).
Ma se scrivo
int64_t val = std::numeric_limits<int>::max();
val *= 2;
qDebug() << "long val" << val;
ottengo
long val 4294967294
che sembra corretto.
Quindi per me sembra che lo 2*max()
sia prima memorizzato in un numero intero (troncato in questo passaggio) e quindi copiato su int64
. Perché succede? Il compilatore sa che il risultato è di tipo int64
in modo che lo 2*max()
si adatti direttamente.