我想知道*返回时会发生什么

时间:2015-05-24 23:59:25

标签: c++ pointers return operators this

假设你有

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) 

随着状态的变化?据我所知,Classes允许您创建自己的数据类型和存储数据。我认为我最大的困惑是返回的功能是什么以及发送它的位置。它是否会覆盖该对象的先前状态?

2 个答案:

答案 0 :(得分:0)

  

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

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

operator++()的语义,在通用对象i上,只需要返回新值,以便行为,例如:

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

已定义。

但是,即使您只是调用它并忽略结果,例如在main中,该值仍会被更改。

答案 1 :(得分:0)

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

Something test4 = ++test3;