chr*_*ris 1 c++ random undefined-behavior language-lawyer
考虑以下这个机构main:
std::srand(std::time(nullptr));
while (std::rand());
Run Code Online (Sandbox Code Playgroud)
令人惊讶的是,我无法找到任何内容,无论是在规范中,谷歌上,还是在本网站上,都是关于它是否定义明确.至于规格:
N3485§6.5/ 4 [stmt.iter]对此情况说:
[注意:迭代语句中对条件的要求在6.4中描述. - 结束说明]
但是,通过6.4,我没有看到任何涉及这种情况的东西.理论上,循环可以实际上永远持续下去,但在实践中,我通常有5毫秒的运行时间,所有测试运行中有一次是22毫秒.
将循环终止条件作为变化的(伪)随机数的基础是明确定义的行为吗?如果不是,那是什么行为?
std::rand() 将在每次迭代时调用,然后循环将继续或不依赖于其返回值.
没有理由在这里有任何未定义的行为.
这与做这样的事情没有什么不同
while (my_vector.empty());
Run Code Online (Sandbox Code Playgroud)
为什么你认为这个案子会特别?
| 归档时间: |
|
| 查看次数: |
230 次 |
| 最近记录: |