为什么这段代码
问题描述:
我目前正在读基于C初学者的书++,它有这个例子的时间(0)的的static_cast:为什么这段代码
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
定义,都不会产生警告。
你想解释为什么压制警告(在这种情况下)不是好的做法吗? –
@MartinBonner呃,我指的是生成这些数字的方式。不是演员本身。现在重新阅读我的答案,听起来不像那样。谢谢。 –