Dzisiaj zrobiłem 64-bitową kompilację mojego projektu po raz pierwszy. Zasadniczo zostało skompilowane, połączone i uruchomione, z wyjątkiem ostrzeżeń narzekających na niezgodność między nowym 64-bitowym typem size_t a prostym typem int. To najczęściej występuje w sytuacjach takich jak ta w moim kodu:Jak uniknąć problemów z typami size_t i int w 64-bitowych wersjach C++?
void func(std::vector<Something> &vec)
{
int n = vec.size();
for (int i=0; i < n; i++)
{
....vec[i]....
}
}
Jest to dość łatwe do naprawienia, a ja przeczytałem artykuł mówiąc, należałoby raczej użyć size_t lub ptrdif_t jako indeksów pętli. Ale co mogę zrobić w takiej sytuacji?
void outsideLibraryFunc(int n);
void func(std::vector<Something> &vec)
{
int n = vec.size();
outsideLibraryFunc(n);
}
nie mogę zmienić deklarację funkcji zewnętrznej biblioteki, która oczekuje argumentu typu int, i muszę go przekazywać liczbę elementów wektorowych. Co mogę zrobić, oprócz wyłączenia ostrzeżeń kompilatora?
+1 na P: Nie wiedziałem, że size_t! = Unsigned int – pm100
@ pm100 It * can * be, i na większości systemów 32-bitowych jest, ale nie musi tak być. W szczególności w 64-bitowych systemach wykorzystujących konwencje LP64 lub LLP64 (najnowocześniejsze systemy 64-bitowe), zwykle jest większy niż "unsigned int". –
ssize_t jest czasem dostępny dla podpisanego rozmiaru_trantu – user318904