Недавно я поиграл с дедукцией типов в C ++. При этом я наткнулся на что-то странное. Когда я запускаю этот код:
#include <iostream>
using namespace std;
int main() {
auto n = 40;
auto factorial = 1;
for(int i = 1; i <=n; ++i)
{
factorial *= i;
}
cout << "Factorial of " << n << " = " << factorial <<endl;
cout << "Size of factorial: " << sizeof(factorial) << endl;
return 0;
}
Он печатает это:
Factorial of 40 = 0
Size of factorial: 4
Так что очевидно, что произошло переполнение буфера, поэтому factorial
равно 0
. Но что я не понимаю, так это то, почему auto не адаптировался к чему-то вроде unsigned long long
, и почему он оставался int
(4 байта)? Есть ли способ исправить это?