编译器如何在C ++中使用虚拟参数区分前缀和后缀(递增和递减)运算符重载

时间:2019-01-09 01:45:40

标签: c++

我们知道,编译器在c ++中使用伪参数来区分前缀和后缀运算符重载(递增和递减)。

让我们考虑以下增量运算符重载示例。

class Chocolate
{
    private: int countChocolate;

    public: Chocolate()
    {
        countChocolate = 0;
    }

    public: Chocolate& operator++()
    {
        ++countChocolate;

        return *this;
    }

    public: Chocolate operator++(int)
    {
        Chocolate temp(countChocolate);

        ++(*this); 

        return temp;
    }

};

int main(int argc, char const *argv[])
{
    Chocolate kitkat;

    ++kitkat; // this will call the prefix

    kitkat++; // this will call the postfix

    return 0;
}

现在,我的问题是编译器如何使用虚拟参数区分它们

区分过程如何在编译器中发生

因为我在两种方法中均未传递任何参数,然后又如何以及为何在两种运算符之间进行区分

因为我的意思

++ kitkat和kitkat ++都将翻译为

kitkat.operator ++();

所以

它如何在编译器中深入工作

谁能详细告诉我

我很好奇。

0 个答案:

没有答案