【发布时间】:2020-04-27 20:41:02
【问题描述】:
由于某种原因,QuantLib 的 Date 对象 ++ 重载运算符没有按预期工作,但我不明白为什么它没有工作。谁能指出原因?
以下测试代码中没有错误或警告。
#include <ql/quantlib.hpp>
#include <ql/time/date.hpp>
#include <iostream>
int main()
{
QuantLib::Date today = QuantLib::Date::todaysDate();
std::cout << "today's date is " << today << std::endl;
std::cout << "tomorrow is " << today++ << std::endl;
std::cout << "tomorrow is " << today+1 << std::endl;
return 0;
}
返回是:
today's date is April 27th, 2020
tomorrow is April 27th, 2020
tomorrow is April 29th, 2020
似乎 ++ 运算符增加了日期但未正确显示,因此 Date+1 实际上再次增加到 29。看起来 ++ 和 + 运算符之间的区别是(在 date.hpp 中):
Date& operator++()
Date operator++(int )
Date operator+(Date::serial_type days) const;
Date operator+(const Period&) const;
本质上 ++ 在 Boost 中使用 Gregorian 对象(在 date.cpp 中)
Date& Date::operator++() {
dateTime_ +=boost::gregorian::days(1);
return *this;
}
Date Date::operator+(Date::serial_type days) const {
Date retVal(*this);
retVal+=days;
return retVal;
}
【问题讨论】: