在if语句c ++中测量时间

时间:2018-02-07 02:28:54

标签: c++ chrono

嗯......从2天前开始,我一直致力于一个项目,记录你所做的点击并反复重复(就像机器人一样),问题是在记录点击之间的时间因为在使用" steady_clock :: now "来测量时间时在if语句中,它只在if语句中声明,如果我尝试使其成为具有NULL值的全局变量,编译器会抛出一个错误,因为" auto &# 34;变量类型必须具有默认值。

#include<chrono>

using namespace std::chrono;

auto start = NULL; //this is an error

int main()
{
     if (!GetAsyncKeyState(VK_LBUTTON))
    {
        auto start = steady_clock::now();
    }
     else if (GetAsyncKeyState(VK_LBUTTON))
    {
        auto end = steady_clock::now();

        std::chrono::duration<double> elapsed = end - start;   //here the compiler throws me an error because start is not declared
    }

}

如果有人回答我的问题,我将非常感激。

抱歉我的英文......

2 个答案:

答案 0 :(得分:0)

这是decltype有用的地方:

decltype(steady_clock::now()) start;
// ...
start = steady_clock::now();

它是括号内表达式的类型。

答案 1 :(得分:0)

首先,您正在尝试设置&#34; start&#34;两次,也试图以不正确的方式使用自动。当编译器看到 auto start = NULL 时应该假设什么?请仔细查看它是如何使用的。

与此同时,我认为你所寻找的是这样的:

#include<chrono>

std::chrono::steady_clock::time_point start; // You can mention the type of start and end explicitly,.
std::chrono::steady_clock::time_point end;

int main()
{
    if (!GetAsyncKeyState(VK_LBUTTON))
    {
        start = std::chrono::steady_clock::now();
    }
    else // don't think you needed an else-if here.
    {
        end = std::chrono::steady_clock::now();
        std::chrono::duration<double> elapsed = end - start; 
    }
}