QuantLib date ++ 运算符重载
QuantLib date ++ operator overloading
出于某种原因,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;
}
return是:
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;
}
变量名后面有++
时,称为'postfix'自增运算符。 return 是变量的副本,然后递增变量本身。这不一定是后缀增量运算符的所有重载必须如何工作,但它是常规的:
int i = 5;
int j = i++; //here j is 5
//i is now 6
要获得您想要的行为,您可以使用 'prefix' 递增运算符,其中 ++
在 变量名称之前。这会增加变量,然后 return 引用它:
int i = 5;
int j = ++i; //here j is 6, as is i
重载运算符时,重载后缀运算符需要伪参数,而重载前缀运算符则不需要。从你的例子:
Date& operator++(); //prefix increment operator
Date operator++(int) //postfix increment operator
因此,要增加日期变量和 return 对它的引用,请使用:
std::cout << "tomorrow is " << ++today << std::endl; //prefix operator
出于某种原因,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;
}
return是:
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;
}
变量名后面有++
时,称为'postfix'自增运算符。 return 是变量的副本,然后递增变量本身。这不一定是后缀增量运算符的所有重载必须如何工作,但它是常规的:
int i = 5;
int j = i++; //here j is 5
//i is now 6
要获得您想要的行为,您可以使用 'prefix' 递增运算符,其中 ++
在 变量名称之前。这会增加变量,然后 return 引用它:
int i = 5;
int j = ++i; //here j is 6, as is i
重载运算符时,重载后缀运算符需要伪参数,而重载前缀运算符则不需要。从你的例子:
Date& operator++(); //prefix increment operator
Date operator++(int) //postfix increment operator
因此,要增加日期变量和 return 对它的引用,请使用:
std::cout << "tomorrow is " << ++today << std::endl; //prefix operator