当前位置: 首页 > 知识库问答 >
问题:

C自适应类型演绎

竺焕
2023-03-14

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

因此,很明显存在缓冲区溢出,因此阶乘0。但我不明白的是,为什么auto没有适应像无符号长长的东西,为什么它保持为int(4字节)?有没有办法解决这个问题?

共有2个答案

章学义
2023-03-14

所以很明显存在缓冲区溢出

乘法结果溢出,但这里没有缓冲区溢出,即当您将更多数据写入缓冲区时

为什么auto不能适应无符号long-long,为什么它保持为int(4字节)?有办法解决这个问题吗?

1是一个整型文字,因此如果使用auto factorial=1它将创建一个int变量,并为该变量保留固定的内存量。无法更改大小,因为如果增加它,它将被淹没在附近的变量中

如果您想要动态调整大小的能力,那么您可以通过在堆上分配内存来自己处理,就像< code>std::vector和< code>std::unordered_map这样的容器一样。这需要更多的内存和CPU资源,这意味着它们不能应用于基本的POD类型,因为它们应该是快速的,并且尽可能接近硬件。如果你想要大整数算法,那么使用任意精度的库,比如GMP或Boost.Multiprecision,或者阅读bigint、big integer、largenumber、任意精度标签以获得更多信息

  • 为什么类型总是一定的大小,不管它的值如何?
  • 我们可以增加数据类型的大小吗?
拓拔嘉运
2023-03-14

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

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

 类似资料:
  • 主要内容:创建自定义适配器,注册自定义适配器,使用适配器Gson使用其内置适配器执行对象的序列化/反序列化。 它也支持自定义适配器。 让我们来讨论如何创建一个自定义适配器以及如何使用它。 创建自定义适配器 通过扩展类并传递目标类型的对象来创建自定义适配器。 重写读写方法分别执行自定义的反序列化和序列化。 注册自定义适配器 使用注册自定义适配器并使用创建一个Gson实例。参考以下实现代码 - 使用适配器 Gson现在将使用自定义适配器将Json文本转换为

  • 首先,抱歉可能重复。我发现了一些关于类似问题的问题。然而,我仍然想不出我的具体情况出了什么问题。 所以,例如json从服务器: 我生成了名为Mall的类(以及数据结构其余部分的所有子类): 服务器返回内容类型text/plain。为了修改内容类型,我编写了简单的扩展类: 最后,这是我试图使用我的网络服务的方式: 然而,我仍然得到同样的例外: 无法提取响应:未找到响应类型[m.m.restsprin

  • 有人能告诉我我做错了什么吗??我从IMDBPY中提取数据,所有的数据都匹配,但现在它不会在我的表中?! sqlalchemy.exc.programmingerror:(psycopg2.programmingerror)无法改编类型'movie'[sql:插入到movie(title,“cast”,plot,username)值(%(title)s,%(cast)s,%(plot)s,%(use

  • Gson使用其内置适配器执行对象的序列化/反序列化。 它还支持自定义适配器。 我们将讨论如何创建自定义适配器以及如何使用它。 创建自定义适配器 通过扩展TypeAdapter类并将其传递给目标对象的类型来创建自定义适配器。 重写read和write方法以分别执行自定义反序列化和序列化。 class StudentAdapter extends TypeAdapter<Student> {

  • 本文向大家介绍C#引用类型和值类型的适用场合和区别,包括了C#引用类型和值类型的适用场合和区别的使用技巧和注意事项,需要的朋友参考一下 1.值类型 值类型包括:数值类型,结构体,bool型,用户定义的结构体,枚举,可空类型。 值类型的变量直接存储数据,分配在托管栈中。变量会在创建它们的方法返回时自动释放。 所有的值类型都是密封(seal)的,所以无法派生出新的值类型。 2.引用类型 引用类型包括:

  • 改型异步请求是用两个方法onResponse()和onFailure()回调的。 我还想使用Gson转换器来转换改型响应,然后用APIPesponse包装它。 如果我用like 好像不起作用。不能将json响应数据解析到结果对象中。 有人能帮助如何让用调用enqueue吗?结果是使用Gson转换器解析json数据内容。 有人能帮我指出这个问题吗?