首页 > 解决方案 > C++自适应类型推导

问题描述

最近,我一直在玩 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

所以很明显存在缓冲区溢出factorial0. 但我不明白的是,为什么 auto不适应a 之类的东西unsigned long long,以及为什么它保持为int(4 个字节)?有没有办法解决这个问题?

标签: c++integer-overflowtype-deduction

解决方案


在 C++ 中,类型只是一个编译时概念。当你真正开始运行程序时,它已经忘记了变量是什么类型。它无法在运行时适应。

你能做的最好的就是使用某种bignum 类型,它会根据需要自动增长,但它仍然保持相同的类型。


推荐阅读