我试图在一个名为Set的简单C ++类上重载=运算符,该类包含一个动态的int数组。对于=运算符,我首先要检查自我赋值,所以我想比较2个指针以查看它们是否具有相同的内存地址。这是代码:
Set& Set::operator=(const Set& setEqual)
{
//first check for self assignment
if(setEqual == this*)
cout << "this is self assignment";
}
错误吐出是error: expected primary-expression before ')' token
我相信我再次对指针产生了误解,所以如果有人能指出(哈!)我朝着正确的方向发展,我会很感激。
答案 0 :(得分:6)
错误是因为this*
无效 - *
是中缀(乘法)或前缀(取消引用指针)。
您可能希望 &setEqual == this
- 从同一内存地址或setEqual==*this
的对象分配 - 使用您定义的任何operator==
比较相等性< / p>
答案 1 :(得分:4)
如果你想比较指向的东西的地址,你真的想要这个:
Set& Set::operator=(const Set& setEqual)
{
//first check for self assignment
if(&setEqual == this)
cout << "this is self assignment";
}
使用某些解决方案提取的(setEqual==*this)
来比较operator==
下的对象是否相等。
答案 2 :(得分:4)
要检测您需要的自我分配
if(&setEqual == this)
你永远不应该使用
if(setEqual == *this)
用于检测自我赋值,因为后一个语句将调用对象的比较,这些对象可能会以您不期望的方式重载,也可能更慢。