QuantLib date ++ 操作员重载

不知道为什么,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;
    }

解决方案:

++ 在变量名之后,它被称为 “postfix “增量运算符。它返回一个变量的副本,然后对变量本身进行增量。这并不是所有postfix增量运算符的重载都必须这样工作,但它是传统的。

int i = 5;
int j = i++; //here j is 5
//i is now 6

为了得到你想要的行为,你可以使用 “前缀 “递增操作符,其中的 ++ 来自 之前 变量名。这将递增变量,然后返回对它的引用。

int i = 5;
int j = ++i; //here j is 6, as is i

当重载运算符时,重载后缀运算符需要一个虚参数, 而重载前缀运算符则不需要。从你的例子来看。

Date& operator++(); //prefix increment operator
Date  operator++(int) //postfix increment operator

因此,要递增日期变量并返回一个引用,使用:

std::cout << "tomorrow is " << ++today << std::endl; //prefix operator

给TA打赏
共{{data.count}}人
人已打赏
未分类

列表理解

2022-9-13 15:46:36

未分类

CSS Flex硬伤项目

2022-9-13 15:46:38

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索