为什么以下代码是不确定的?

Why is the following code non-deterministic?

本文关键字:不确定 代码 为什么      更新时间:2023-10-16

我正在复习一些面试准备问题,我在C++中看到这个问题,问为什么下面的代码是不确定的。我不知道为什么,网上似乎也没有任何东西可以解释事情。任何帮助将不胜感激,谢谢!

void func(std::vector<int>& input) {
static int i = 0;
auto start = getTimestamp();
for (auto it = input.begin(); it != input.end(); it++) {
*it = i;
}
auto end = getTimestamp();
cout << start<< end<< input.size());
}

作为后续,另一个问题是:"getTimestamp(("如何影响计时测量?

该函数是确定性的,因为它总是以相同的方式修改其输入:它将input归零。

但是,进程可能会被换出,CPU 时钟启动,时钟关闭,缓存可以是热的或冷的,等等。有数百种原因可以解释为什么一次代码可能会运行得更快,另一次可能会运行得更慢。这使得每次运行所花费的时间不确定。

由于它显式打印出此计时信息,因此它是不确定的。