微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

C ++确定是否设置了变量

如何解决C ++确定是否设置了变量

我有一个定义的变量:
SYstemTIME m_TOTime;
调用GetSystemTime函数获取UTC时间:
GetSystemTime( &m_TOTime );
是否可以确定是否已调用GetSystemTime来设置m_TOTime?我还有另一个使用此变量的函数,但是如果尚未调用GetSystemTime(有时不一定必须调用它),它将返回一个空白对象。我希望像m_TOTime == null这样的东西可以工作。     

解决方法

使用初始化程序。
SYSTEMTIME m_TOTime = { 0 };  // Initialize structure to zero

...

if (m_TOTime.wYear != 0)
    // structure has been initialized
通常,如果变量的所有可能值都为\“ legal \”,则不能执行此操作,但是假设时间旅行是不可能的,则在调用GetSystemTime()之后,年份永远不会为零。 如果所有可能的值都是合法的,则需要使用辅助\“ bool m_TOTime_initialized = false \”变量或类似的变量。     ,您应该使用一个值来初始化它,该值不能是调用it3 it的结果。最有可能应该将值设为0-通常是从过去的任意时刻开始计算系统时间,例如1970年1月1日,00:00:00,这将不再发生:-)计数器可能会在将来的某个时候发生变化,但应该会在相当遥远的将来发生,例如2038 *。在此之前,您可能是安全的:-) *确切的细节是特定于操作系统的。     ,您可以为变量分配一些魔术值。例如,
SYSTEMTIME m_TOTime = {0}; // This should set all struct to 0
然后,您可以检查ѭ​​3ѭ是否像这样被调用:
if (m_TOTime.wYear != 0) {
    // we have set the value with the GetSystemTime call
}
当然,您可以选择除
0
以外的其他内容,例如
-1
或保证不被
GetSystemTime
返回的值。 或者,您可以具有一个布尔标志,该标志将告诉您是否设置了变量:
SYSTEMTIME m_TOTime;
bool m_TOTime_set = false;
...
GetSystemTime(m_TOTime);
m_TOTime_set = true;
...
if (m_TOTime_set) {
    // do stuff here
}
    ,另一种方法是,将其包装在构造时初始化的类中:
class clock
{
public:
    clock()
    {
        system();
    }

    void system()
    {
        GetSystemTime(&time_);
    }

    void local()
    {
        GetLocalTime(&time_);
    }

    const SYSTEMTIME& get() const
    {
        return time_;
    }

private:
    SYSTEMTIME time_;
};
它可能是过大的,但是您将避免时代包装问题(假设将来会适当更改GetBlahTime),进一步,您可以采取额外的步骤并包装对SYSTEMTIME的所有参数的访问,然后可以针对不同的时间选择不同的时间实现平台之类的东西,最后,您可以编写可以为您做常见事情的运算符/方法(时间比较,时间增量,秒表等)。     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。