c++ - 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
所以很明显存在缓冲区溢出factorial
,0
. 但我不明白的是,为什么 auto不适应a 之类的东西unsigned long long
,以及为什么它保持为int
(4 个字节)?有没有办法解决这个问题?
解决方案
在 C++ 中,类型只是一个编译时概念。当你真正开始运行程序时,它已经忘记了变量是什么类型。它无法在运行时适应。
你能做的最好的就是使用某种bignum 类型,它会根据需要自动增长,但它仍然保持相同的类型。
推荐阅读
- java - Heroku - 由于测功机过载,Java 服务不断崩溃
- php - Laravel 等效中的未知列
- c# - Uri - 附加路径
- ios - 如何在 UITableViewCell 中使用动态内容配置 stackview?
- excel - 根据变量插入行
- python - 如何过滤包含列的相似模式但另一列的值不同的行
- react-native - 在 react-native 应用程序中安装 date-fns 错误后,纱线启动失败
- unity3d - How can I select a unit in Unity and activate the Canvas on that unit?
- android - 无法启动 Android Studio(当它已经工作了很多次时)
- r - cumsum 和 product 基于唯一 ID