簡體   English   中英

為什么static_cast on time(0)在這段代碼上

[英]Why the static_cast on time(0) on this code

我正在閱讀一本關於C ++的初學者書,它有這個例子:

int main()
{
    srand(static_cast<unsigned int>(time(0))); //seed random number generator
    int randomNumber = rand(); //generate random number
    int die = (randomNumber % 6) + 1; // get a number between 1 and 6
    cout << "You rolled a " << die << endl;
    return 0;
}

我只是想知道演員的目的。 我試過了

cout << time(0);

cout << static_cast<unsigned int>(time(0));

它產生相同的結果,所以我不確定為什么代碼中的強制轉換。

std::time返回的類型, std::time_t是一個實現定義的數字類型。

數值類型可以隱式地相互轉換,所以srand(time(0)); 保證定義良好,但在某些實現中, std::time_t可能是一個類型,其所有值都無法用unsigned int表示,因此一個有用的編譯器可能會產生一個關於可能是偶然的縮小轉換的警告。

顯式靜態轉換告訴編譯器轉換是有意的,因此無論std::time_t如何定義,都不會產生警告。

srand()期望unsigned inttime()返回std::time_t ,這是一個實現定義的類型。 它可能不是unsigned但簽名。 如果將std::time_t定義為unsigned int ,則static_cast可以抑制錯誤/警告的可能性。 請注意,這實際上不是很好的做法。

PS如果你有一個支持C ++ 11的編譯器,那么一起停止使用rand()/srand()並開始使用新的頭<random>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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