c++ - 运算符++ : reference vs value return and unused argument

标签 c++ reference operator-overloading increment

我看到这个 C++ 代码是一个更大示例的一部分:

Date &Date::operator++()
{
    helpIncrement();
    return *this;
}

Date Date::operator++( int )
{
    Date temp = *this;
    helpIncrement();
    return temp;
}

首先,如果 Date temp = *this,那么我不明白为什么这两个函数的返回类型有任何不同?一个返回*this,一个返回temp,赋值给*this?

其次,为什么第二个函数的参数没有变量名?

最佳答案

第一个返回this 指向的对象作为引用。也就是说,返回的对象正在调用operator++ 的对象。但是,当您执行 Date temp = *this 时,temp 是从 *this 的值复制构造的。然后它又被复制出函数。你从第二个函数中得到的是一个全新的对象。您的第二个问题的答案中解释了为什么函数有这种差异。

自增运算符有两种,一种是后自增(i++),另一种是前自增(++i)。为了能够单独重载它们中的每一个(尽管它们具有相同的名称,operator++),C++ 标准指定后增量运算符采用 int 类型的参数具有未指定的值。这只是为了让您可以为每次使用运算符重载函数。由于您不太可能想要使用该未指定的值,因此您最好将其保留为未命名。

现在,预递增运算符的预期行为是它递增对象并评估为该对象。这就是为什么它在这种情况下返回一个引用。后增量的预期行为是它保留原始值的拷贝,增加对象然后返回原始值。因此,它返回 temp 拷贝。

关于c++ - 运算符++ : reference vs value return and unused argument,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13791805/

相关文章:

c++ - 重载成员访问运算符有什么用?

c++ - 构建 JSON 对象的算法

c++ - 周期性时间间隔调用函数的API

c++ - 是否可以在 Visual C++ Build Tools 2015 Update 3 上应用修复程序

c - 通过引用访问 va_arg 宏是错误的风格还是不正确的?

c++ - 通过不返回引用来防止下标运算符赋值会导致运行时崩溃

c++ - 在启动另一个计时器之前等待 20 秒的非阻塞计时器

c++ - 什么时候引用变量合适,为什么?你能解释一下实际的语法和位置吗?

c++ - 为什么需要引用 const 以避免复制参数

c++ - 重载 [] 运算符并引用对象本身