C++primer 习题6.13
详细解释下面while循环中的语句是如何执行的:
*dest++=*source++;
答案的说法是:1.指针dest加1;2.指针source加1;3.将source原来所指向的对象赋给source原来所指向的对象。
疑问:++的优先级比*的优先级高,而且结合顺序是从右至左。 不是应该是dest加1,source加1吗?
为什么是指针加1?
[解决办法]
C++很多操作符都是可被重载的,而且其优先级不变。可以利用这一点来验证你的问题:
代码:
#include <string>
using namespace std;
class Number
{
private:
string name;
public:
Number(const string& name)
{
cout<<"构造"<<name<<endl;
this->name = name;
}
// 后递增的操作符重载方法必须定义一个无用的int参数
Number operator ++(int)
{
cout<<"{"<<name<<"} Number::operator++"<<endl;
return Number(name + "Copy");
}
Number& operator=(const Number& rhs)
{
cout<<"{"<< name<<"} Number::operator="<<endl;
return *this;
}
Number& operator*()
{
cout<<"{"<< name<<"} Number::operator*"<<endl;
return *this;
}
};
int main() {
Number dest("dest"), source("source");
*dest++ = *source++;
return 0;
}