[英]How to avoid problems with size_t and int types in 64bit C++ builds?
今天我第一次制作了64bit的項目版本。 基本上它編譯,鏈接並運行正常,除了抱怨新的64位size_t類型和簡單int類型之間不兼容的警告。 這主要發生在我的代碼中這樣的情況:
void func(std::vector<Something> &vec)
{
int n = vec.size();
for (int i=0; i < n; i++)
{
....vec[i]....
}
}
這很容易修復,我讀了一篇文章說應該使用size_t或ptrdif_t作為循環索引。 但是在這種情況下我能做些什么呢?
void outsideLibraryFunc(int n);
void func(std::vector<Something> &vec)
{
int n = vec.size();
outsideLibraryFunc(n);
}
我無法更改外部庫的函數聲明,它需要一個int類型的參數,我需要傳遞向量元素的數量。 除了禁用編譯器警告外,我還能做些什么?
對int
進行顯式轉換,例如
void outsideLibraryFunc(int n);
void func(std::vector<Something> &vec)
{
outsideLibraryFunc(static_cast<int>(vec.size()));
}
它沒有消除將size_t
轉換為int
任何潛在問題,但它確實告訴編譯器您是故意進行轉換,並且它不會警告您。
投了嗎? 說真的,如果你不能改變外部庫,你就無能為力。 為了額外安全檢查溢出。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.