Ecco il mio codicegcc "troppo pieno nell'espressione" mentre l'espressione equivalente equivalente funziona bene
#include <iostream>
static const unsigned long long int xx = (36 * 36 * 36 * 36) * (36 * 36 * 36 * 36);
static const unsigned long long int y = 36 * 36 * 36 * 36;
static const unsigned long long int yy = y * y;
int main()
{
std::cout << xx << std::endl;
std::cout << yy << std::endl;
return 0;
}
Questa uscita la compilation
# g++ -std=c++11 test.cpp -o test
test.cpp:2:62: warning: integer overflow in expression [-Woverflow]
static const unsigned long long int xx = (36 * 36 * 36 * 36) * (36 * 36 * 36 * 36);
Questa è l'uscita di esecuzione
# ./test
18446744073025945600
2821109907456
Can spieghi perché vedo questo avviso e risultati diversi? se 36 può essere inserito in char, allora 36^8 può essere inserito in unsigned long long int quindi non sono sicuro di quale sia il problema qui, si prega di avvisare. (Sto usando gcc 4.9.2)
Questo sembra essere un malinteso molto comune: che un intento successivo influenza in qualche modo il significato del codice precedente. (Dove "precedente" e "successivo" si riferiscono all'ordinamento dell'inclusione subexpression.) In genere non è il caso in C++; il più vicino a un effetto simile è la risoluzione del sovraccarico sugli operandi di indirizzo all'interno di un cast. –