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
と言って、どういうわけかキャストしますか? 上記のコードが 64 ビット Linux で実行されると、コンパイラーは構造があいまいであるというエラーを返します。long int
mpreal
64ビットではまったく使用しないようにと言う人もいますlong long int
が、残念ながら、これがコードに組み込まれている別のライブラリ(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);
}