我正在大学学习c++
,并且有一段代码我不明白一件事。我使用+1900
,但我的教授在评论栏中使用-1900
。
Fecha& Fecha::operator +=(int days) {
tm f = {};
f.tm_mday = day_ + days;
f.tm_mon = mon_ - 1;
f.tm_year = year_ - 1900; //there is my dude, why out -1900 and not +1900
//instead like below
mktime(&f);
day_ = f.tm_mday;
mon_ = f.tm_mon + 1;
year_ = f.tm_year + 1900;
return *this;
}
在struct tm
,tm_year
是自1900年以来的一年。因此,从格里高利年转换为正确的tm_year
值,你减去1900.要从tm_year
转换为格里高利年,你增加1900。
这两个操作必须彼此相反 - 一个加法和一个减法 - 否则如果你多次转换前后,你最终会越来越多地改变这个值。
你没有显示完整的代码,所以我猜测year_
是你班级的成员。
在这种情况下,您必须引用此值的范围。 struct tm
预计一年是自1900年以来的年数。如果你的班级存储自耶稣基督诞生以来的年数,那么你将不得不删除1900,从你的成员期望到tm
的期望。
例如,你将2019
存储在你的year_
成员中,但tm.tm_year
需要119
(因此2019 - 1900
)。
相反,你必须反转操作,即添加1900。