C++确定是否设置了变量
C++ Determining if a variable is set
我有一个定义的变量:
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
通常,如果变量的所有可能值都是"合法的",则无法执行此操作,但假设时间旅行是不可能的,则在调用GetSystemTime()后,年份永远不会为零。
如果所有可能的值都是合法的,则需要使用辅助变量"bool m_TOTime_initialize=false"或类似的变量。
您应该用一个不能是GetSystemTime
调用结果的值来初始化它。很可能值为0就可以完成这项工作-通常系统时间是从过去的任意时刻开始计算的,比如1970年1月1日00:00:00,这种情况不会再次发生:-)计数器可能在未来某个时候结束,但它应该在相当遥远的未来发生,比如2038*。在那之前,你可能是安全的:-)
*具体细节具体操作系统。
您可以为变量分配一些神奇的值。例如,
SYSTEMTIME m_TOTime = {0}; // This should set all struct to 0
然后你可以检查它GetSystemTime
是否被这样调用:
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_;
};
这可能有些过头了,但你会避免epoch包装的问题(假设GetBlahTime在未来适当更改),此外,你可以更进一步,包装对SYSTEMTIME所有参数的访问,然后你可以为不同的平台或其他平台选择不同的时间实现,最后,您可以编写运算符/方法,为您做一些常见的事情(时间比较、delta时间、秒表等)。
- 将双精度变量设置为另一个变量的值
- 将变量设置为类型模板
- 如何为具有整数名称的变量设置位集
- 在 c++ 中将多个变量设置为相同的值
- 我是否必须在类中的所有变量C++设置为 private?
- 在C 中,如何使用变量设置Char Grid2d [x] [y]
- 如果将变量设置为等于新对象,旧对象会发生什么情况?
- C++ 给出编译器错误,将一个(静态)常量全局变量设置为另一个静态常量变量
- 是否可以将类成员变量设置为类函数的结果?
- 将 c++ 代码中的当前用户环境变量设置为对其他进程(如 cmds)可见
- 此CMAKE错误意味着什么?我的变量设置为未发现
- 如何基于用户设置的初始变量设置一组常数值
- 如何使用const成员变量设置数组大小
- 使用变量设置数组长度
- 使用变量设置bitset的大小
- 在C 中,如何将派生类中的私有变量设置为基类的输入值
- C 标量变量设置为零值
- C 定义变量设置值
- 正在将类级别的2D数组变量设置为传入值-C++
- 是否有C++标准类在作用域出口处将变量设置为值