C++ 初始化`rand()的两种方法`
大多数时候,我看到C伪随机数生成器的初始化,其内容如下:C++ 初始化`rand()的两种方法`,c++,static-cast,srand,C++,Static Cast,Srand,大多数时候,我看到C伪随机数生成器的初始化,其内容如下: srand(time(NULL)); 无论如何,我看到了使用< /P>的C++代码 srand(static_cast<unsigned int>(time(0))); srand(静态_-cast(时间(0)); 这两条线是否等同于初始化的优劣,还是有理由倾向于C++中更冗长的方式? 未指定的确切类型。它通常是一个有符号整数。接受一个无符号(即无符号整数)参数 因此,返回的类型与std::srand期望的类型不匹配。
srand(time(NULL));
无论如何,我看到了使用< /P>的C++代码
srand(static_cast<unsigned int>(time(0)));
srand(静态_-cast(时间(0));
这两条线是否等同于初始化的优劣,还是有理由倾向于C++中更冗长的方式?
未指定的确切类型。它通常是一个有符号整数。接受一个
无符号
(即无符号整数
)参数
因此,返回的类型与std::srand
期望的类型不匹配。根据std::time\t的确切类型,编译器可能会以静默方式对其进行转换,但可能不会
例如,在Windows上使用Visual C++编译器返回一个64位整数。在不损失精度的情况下,很难将其转换为
unsigned int
,编译器可能会(应该?我不记得了)发出警告
因此,请执行强制转换,以确保将正确的类型传递给std::srand
<> P>随着在参数>代码<时间>代码>中的差异,C++中的代码> 0 < /CODE>已经在标准化被隐式转换为空指针之前。IIRC modern C(从C99开始?)也会这样做,但情况并非总是如此。所以C++中空指针的符号常量<代码> null <代码>,C++中的整数常量<代码> 0代码>代码> < /P>
<>注意,自从C++ 11,建议的空指针是.< /p>不是你的问题的答案,但是应该是C++中的首选(11或更高)。如果您不编写显式强制转换,它将隐式执行相同的转换。您应该注意以下内容:。我记得其中一个代码是由windows用户编写的,现在可以理解了!