是否有明确定义的随机循环终止条件?

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毫秒.

将循环终止条件作为变化的(伪)随机数的基础是明确定义的行为吗?如果不是,那是什么行为?

cmc*_*cmc 7

std::rand() 将在每次迭代时调用,然后循环将继续或不依赖于其返回值.

没有理由在这里有任何未定义的行为.

这与做这样的事情没有什么不同

while (my_vector.empty());
Run Code Online (Sandbox Code Playgroud)

为什么你认为这个案子会特别?