我目前正在阅读一本关于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));
它会产生相同的结果,因此我不确定为什么代码中的强制转换。
答案 0 :(得分:5)
std::time
返回的类型std::time_t
是实现定义的数字类型。
数字类型可以隐式地相互转换,因此可以保证srand(time(0));
定义良好,但在某些实现中,std::time_t
可能是unsigned int
无法表示所有值的类型因此,一个有用的编译器可能会产生一个关于缩小转换的警告,这可能是偶然的。
显式静态强制转换告诉编译器转换是故意的,因此无论std::time_t
如何定义,都不会产生警告。
答案 1 :(得分:4)