c++ - 使前缀运算符在某些情况下什么都不做

标签 c++

Overloading postfix operator doesn't work

这是我昨天修复后的程序。如果我的时间和日期设置为 @ 零,我将无法否定前缀运算符执行任何操作。

NumDays NumDays::operator--()
{
    --hour;
    simplify();
    return *this;
}

NumDays NumDays::operator--(int)
{
    NumDays obj1(*this);

    if(day == 0 && hour > 0)
        {   hour--; }

    simplify();
    return obj1;
}

如果我尝试像后缀运算符一样使用 if 状态,即使日期和时间不为 @ 0,我的两个运算符也不会工作。 如果日和小时为 0,我如何使前缀运算符不执行任何操作?

最佳答案

首先,正如 Wimmel 所指出的,您的逻辑似乎不正确。我认为您只想在两者 day,hour 为零时禁用operator--

其次,前缀运算符应该返回一个引用。

第三,您可以让后缀运算符使用前缀一,这样就不会重复代码。

总而言之:

NumDays& NumDays::operator--()
{
    if (day > 0 || hour > 0)
    {
       --hour;
       simplify();
    }
    return *this;
}

NumDays NumDays::operator--(int)
{
    NumDays copy(*this);
    ++(*this);
    return copy;
}

关于c++ - 使前缀运算符在某些情况下什么都不做,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22869352/

相关文章:

c++ - 为什么这段将 std::array 转换为 std::string 的代码不显示任何内容?

c++ - 混合部分模板特化和默认模板参数

c++ - 如何在 Xcode 9.3 中显示 C++ 代码文档?

c++ - 为什么不能显式调用构造函数而析构函数可以?

c++ - 返回类型后的静态关键字

c++ - 在 OpenCV 中自动检测和裁剪 ROI

c++ - 从非托管 C++ 调用 PowerShell 脚本

c++ - 我在迭代 map 并更改其中的值时遇到问题

c++ - 兰德生成相同的数字

c++ - Google Protocol Buffers - 缺少必填字段,即使所有字段显然都存在