我正在嘗試按如下方式使用計時持續時間,但如果我將該比率增加爲高於std::ratio<1,50>
的任何值,則會在編譯期間引發error: no viable overloaded '-='
時發生的錯誤elapsed -= tickeRate
。爲什麼不會減小chrono :: durations?
int main()
{
using clock = std::chrono::high_resolution_clock;
using seconds = std::chrono::seconds;
std::chrono::duration<long long, std::ratio<1,20>> tickRate(1);
// std::chrono::duration<long long, std::ratio<1,60>> tickRate(1);
clock::time_point start, stop;
start = clock::now();
std::this_thread::sleep_for(seconds(1));
stop = clock::now();
clock::duration elapsed = stop - start;
int i = 0;
while (elapsed >= tickRate)
{
elapsed -= tickRate;
i++;
}
std::cout << "ticked " << i << " times." << std::endl;
return 0;
}
第一個問題是,爲什麼它只在tickRate
> 1/50時拋出錯誤?第二,我可以研究什麼課題,以便我可以通過未來的問題推理?
編輯:
編譯器版本是:蘋果LLVM 7.0.2版(鐺-700.1.81)
此外,該實際工作有更小的數字,但不能肯定它。對我來說,1/51 .. 1/99失敗,但是1/100開始再次正常工作。我嘗試過雙打,並且1/2500,1/3600扔同樣的錯誤。現在我更加困惑。
在我的機器上它可以很好地適用於'100','200'和'1000'。可能這個比例應該可以被一些數字整除。 – alexeykuzmin0
你的編譯器是什麼? – rustyx
似乎是這樣。自從失敗後,我從未超過60歲,但在您說出這一點之後,我嘗試了不同的較小值。我會更新這個問題。謝謝。 – stewsims