gpt4 book ai didi

c++ - 为前后增量重载 C++

转载 作者:IT老高 更新时间:2023-10-28 14:01:38 25 4
gpt4 key购买 nike

我们可以重载 operator++ 来进行前自增和后自增吗?即调用 SampleObject++++SampleObject 给出正确的结果。

class CSample {
public:
int m_iValue; // just to directly fetch inside main()
CSample() : m_iValue(0) {}
CSample(int val) : m_iValue(val) {}
// Overloading ++ for Pre-Increment
int /*CSample& */ operator++() { // can also adopt to return CSample&
++(*this).m_iValue;
return m_iValue; /*(*this); */
}

// Overloading ++ for Post-Increment
/* int operator++() {
CSample temp = *this;
++(*this).m_iValue;
return temp.m_iValue; /* temp; */
} */
};

我们不能只根据返回类型重载一个函数,而且即使我们认为它是允许的,由于重载决策的模糊性,它也不能解决问题。

既然提供了运算符重载来使内置类型表现得像用户定义的类型,为什么我们不能同时为我们自己的类型使用前置和后置增量?

最佳答案

增量运算符的后缀版本采用虚拟 int 参数来消除歧义:

// prefix
CSample& operator++()
{
// implement increment logic on this instance, return reference to it.
return *this;
}

// postfix
CSample operator++(int)
{
CSample tmp(*this);
operator++(); // prefix-increment this instance
return tmp; // return value before increment
}

关于c++ - 为前后增量重载 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15244094/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com