如何解决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 举报,一经查实,本站将立刻删除。