【问题标题】:I want to know what happens when *this is returned我想知道当 *this 返回时会发生什么
【发布时间】:2015-08-06 10:03:49
【问题描述】:

假设你有

class Something
{
    int nVal1;
public:
    Something(int x = 0) { nVal1 = x }
    Something& operator++()
    {
        if (nVal1 == 9)
            nVal1 = 0;
        else
            ++nVal1;

        return *this; 
    }
};

int main()
{
    Something test3;
    ++test3;
}

我还是 C++ 新手,如果我错了,请纠正我。 this 指针返回对调用重载operator++ 的对象的引用。 ++nVal1 是成员函数的本地函数,但是因为它是一个成员函数,对 test3 对象的状态进行操作,所以 nVal1 的值不会改变,除非它被重新分配或对象被销毁?另外,当*this 返回时,它是否将更改返回给对象?就像这里是

Something object(test3 address) 

随着状态的变化?我了解类允许您创建自己的数据类型并存储数据。我认为我最大的困惑是返回的函数是什么以及它在哪里发送。它会覆盖该对象的先前状态吗?

【问题讨论】:

    标签: c++ pointers return operators this


    【解决方案1】:

    正如所写,当调用operator++() 时,代码将更改test3.nVal1 - 我不确定您为什么认为它不会。 *this 的返回是一些运算符用来允许链接的模式;例如++(++test3),或者允许递增的结果,例如,传递给另一个函数,例如分配给另一个Something;例如

    Something test4 = ++test3;
    

    【讨论】:

    • 除了operator++(int) 应该按值返回,所以在你的例子中:(test3++)++ 实际上只会增加一次test3。而且 OP 也在定义 operator++() 而不是 operator++(int)
    • Duh - 打字速度比我想象的要快。固定。
    【解决方案2】:

    但是因为它是一个成员函数,它对 test3 对象的状态进行操作,所以 nVal1 的值不会改变,除非它被重新分配或对象被销毁?

    当您在Something 上调用operator++() 时,nVal1 的值会发生变化。您还返回新值的事实与您对nVal1 执行的更改无关。

    operator++() 的语义,在泛型对象i 上,只要求您返回新值,以便在例如:

    std::cout << (++i);
    

    已定义。

    但即使你只是简单地调用它并忽略结果,就像在你的 main 中一样,值仍然会改变。

    【讨论】:

      猜你喜欢
      • 2021-11-28
      • 2019-10-25
      • 1970-01-01
      • 2019-06-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多