C++ 时间测量类被字符串输入减慢

C++ 时间测量类被字符串输入减慢,c++,string,C++,String,我试图为时间度量创建一个简单的类,其中strat()将开始度量,end()将结束度量并得出结果。到目前为止,我已经: #include <sys/time.h> #include <string> #include <iostream> using namespace std; class Time { public: Time() {strTmp.clear();} void start(string str) { st

我试图为时间度量创建一个简单的类,其中strat()将开始度量,end()将结束度量并得出结果。到目前为止,我已经:

#include <sys/time.h>
#include <string>
#include <iostream>

using namespace std;

class Time {
public:
    Time() {strTmp.clear();}

    void start(string str) {
        strTmp=str;
        gettimeofday(&tim, NULL);
        timeTmp = tim.tv_sec+(tim.tv_usec/1000000.0);
    }
    void end() {
        gettimeofday(&tim, NULL);
        cout << strTmp << " time: " << timeTmp - tim.tv_sec+(tim.tv_usec/1000000.0) << "s" << endl;
        strTmp.clear();
    }
private:
    double timeTmp;
    string strTmp;
    timeval tim;
};

int main()
{
    Time t;
    t.start("test");
    t.end();
    return 0;
}
#包括
#包括
#包括
使用名称空间std;
上课时间{
公众:
时间(){strTmp.clear();}
无效开始(字符串str){
strTmp=str;
gettimeofday(&tim,NULL);
timeTmp=tim.tv_sec+(tim.tv_usec/1000000.0);
}
void end(){
gettimeofday(&tim,NULL);

cout一个简单的字符串不应该给测试增加那么多时间(1秒?)

在任何情况下,请按常量引用而不是按值传递字符串。按值传递时会产生不必要的副本:

void start(const string& str) {

另一个选项是风格——这个字符串除了让输出看起来“花哨”之外还有什么用途?为什么不干脆扔掉它?另外,为什么你的类要做
cout
?如果目标是封装
Time
,那么就不需要cout——让
Time
类的客户机来处理I/O。

看起来你应该把计时器标记字符串传递给构造函数,而不是start函数。Also、 当计时器处于活动运行状态时,您不需要执行此计算。
timeTmp=tim.tv\u sec+(tim.tv\u usec/1000000.0);。请等到注册完调用
end
的时间后,再执行类似这样的单位转换操作。

您需要记住运算符优先级:

    cout << strTmp << " time: " << timeTmp - tim.tv_sec+(tim.tv_usec/1000000.0) << "s" << endl;

cout常量引用没有改变延迟。我仍然得到1.11038s和-9.53674e-07s,没有看到我上面添加的注释。有些地方不对劲。甚至你的“快”时间看起来是假的。它是一个负数??我不小心从结束时间中减去了开始时间。这就是为什么我有一个负数。当我把它改为结束时间减去开始时间后,1瑞典克朗的延迟也消失了。这对我来说真的很奇怪,在我的理解中,切换位置只会导致负号的改变。然而问题现在消失了。好的,这是一个“小数字+大数字=大数字,没有变化”事情就是这样,这就是为什么会有1秒的结果。还有一些事情在发生。1秒对你来说不是很奇怪吗?我看不出传递一个简单的string对象需要1秒的时间。你是从输出语句中获取时间,还是真的在看时钟并观察它所花费的时间?如果是前者,请为1编写一个循环如果你说的是真的,循环100次应该需要一分钟。