정확히 32 비트 Linux 시스템이 64 비트 Linux와 비교하여 long long int
을 처리합니까?32 비트 Linux와 64 비트 Linux 및 MPFR에서 긴 long int
내 32 비트 시스템에서는 MPFR 데이터 유형에 C++ wrapper을 사용합니다. 이 래퍼에는 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에서 실행되면 컴파일러는 구성이 모호하다는 오류를 발생시킵니다.
나는 어떤 사람들은 64 비트에서 전혀 long long int
을 사용하지 말라고 말할 것임을 알고 있지만 불행히도이 코드는 다중 정밀도 데이터 형식을 구성하기 위해 빌드 된 다른 라이브러리 (odeint)를 사용하고 있습니다. 나는 변화시킬 수 있다고 생각하지 않습니다.
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);
}
모호한 생성자는 무엇입니까? – ecatmur
'오류 : 오버로드 된 'mpreal (long long int)'의 호출이 모호합니다. ''long long int ''에 의해 생성되는 것으로 정의되지는 않았지만 32 비트 gcc는 64 비트 리눅스가 아니라 어쨌든 작동합니다. 내 OP에서와 같이'long long int '에서'mpreal.h'로 구성 할 때 내 자신의 생성자를 작성하지 않으면. – fpghost
위키에서 :'32 비트 Linux, DOS 및 Windows에서 int 및 long은 32 비트이고 long long은 64 비트입니다. 64 비트 Linux에서 int는 32 비트이고 long long long은 64 비트입니다. 이 상황을 설명 할 수 있습니다 생각, mpreal 32 비트 및 경우 int64_t에 대한 생성자 (32x 시스템에서 긴 long int) 정의하는 경우 검사하는 것 같습니다. 그러나 64x 시스템의 경우 long int와 long long int는 동일하므로 원칙적으로 long long int로는 아무도 먹이지 않아야합니다. 그래서 생성자가 정의되지 않았다고 생각합니다. – fpghost