long long int
与 64 位 Linux 相比,32 位 Linux 系统究竟如何处理?
在我的 32 位系统上,我对 MPFR 数据类型使用C++ 包装器;这个包装器有一个为long int
但不是定义的构造函数long long int
。然而,在 32 位系统上,这段代码可以正常工作:
long long int i=5LL;
mpreal myVar(i);
cout<< "this was constructed with a long long int:" <<myVar <<endl;
这怎么可能?32 位 gcc 是否只是以某种方式将数据类型long long int
转换long int
为具有构造函数的语句?如果上面的代码在 64 位 Linux 上运行,那么编译器会导致构造不明确的错误。mpreal
我知道有些人会告诉我根本不要long long int
在 64 位上使用,但不幸的是,我正在使用另一个库(odeint),它内置在代码中以这种方式构造我给定的多精度数据类型,所以我不'认为我不能改变事情。
无论如何与64位long long int
完全相同吗?long int
如果我投到 会丢失数据long int
吗?例如,如果我制作自己的构造函数,例如:
mpreal(const long long int u, mp_prec_t prec, mp_rnd_t mode)
{
mpfr_init2(mp,prec);
mpfr_set_si(mp, u, mode);
}