Можете ли вы воспроизвести или объяснить эту ошибку Visual C ++ с помощью ctime?
этопример кода будет выводитьtime: 0
независимо от стоимостиN
при компиляции с Visual Studio Professional 2013 Update 3 в режиме выпуска, как 32-разрядная, так и 64-разрядная опция:
#include <iostream>
#include <functional>
#include <ctime>
using namespace std;
void bar(int i, int& x, int& y) {x = i%13; y = i%23;}
int g(int N = 1E9) {
int x, y;
int r = 0;
for (int i = 1; i <= N; ++i) {
bar(i, x, y);
r += x+y;
}
return r;
}
int main()
{
auto t0 = clock();
auto r = g();
auto t1 = clock();
cout << r << " time: " << t1-t0 << endl;
return 0;
}
При тестировании с gcc, clang и другой версией vc ++ на rextester.com, он работает правильно и выводитtime
больше нуля. Любые подсказки, что здесь происходит?
Я заметил, чтоg()
функция восстанавливает правильное поведение, но изменяет объявление и порядок инициализацииt0
, r
а такжеt1
не.