大多数时候我看到C伪随机数生成器的初始化,它的内容如下:
Select sum(paid) over (partition by clmnum order by sysdt )
From #temp
无论如何,我使用
看到了C ++代码 srand(time(NULL));
这两行是否等同于初始化的优点,或者有理由更喜欢C ++中更冗长的方式?
答案 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
。