簡體   English   中英

如何避免64位C ++版本中size_t和int類型的問題?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM