两种初始化`rand()`的方法

时间:2018-02-20 20:47:58

标签: c++ static-cast srand

大多数时候我看到C伪随机数生成器的初始化,它的内容如下:

Select sum(paid) over (partition by clmnum order by sysdt )
From #temp

无论如何,我使用

看到了C ++代码
 srand(time(NULL));

这两行是否等同于初始化的优点,或者有理由更喜欢C ++中更冗长的方式?

1 个答案:

答案 0 :(得分:3)

std::time_t的确切类型未指定。 通常是有符号整数。 std::srand需要unsigned(即unsigned int)参数。

因此std::time返回的类型与std::srand期望的类型不匹配。根据{{​​1}}的确切类型,编译器可能会静默转换它,但它可能不会。

例如,在Windows上使用Visual C ++编译器time返回 64位整数。这不能轻易地转换为std::time_t而不会损失精度,编译器可能(应该?我不记得)警告过。

因此,强制转换,以确保将正确的类型传递给unsigned int

由于参数的差异传递给std::srand,因此在C ++ time之前,标准化之前已经可以隐式转换为空指针。 IIRC现代C(自C99?)也做到了,但情况并非总是如此。因此,C中空指针的符号常量0和C ++中的整数常量NULL

请注意,由于C ++ 11推荐的空指针是nullptr