【问题标题】:What does =+ mean in c++ [duplicate]=+在c ++中是什么意思[重复]
【发布时间】:2017-10-16 00:42:21
【问题描述】:

我一直在研究运算符重载,但我无法理解这一点,每当我使用 s1=+s2 答案是s1=1 s2=1,当我使用s2=+s1 时,我得到s1=2 s2=2 请解释

#include<iostream>
using namespace std;
class score
{   private:
    int val;
    public:
    score()
    {   val=0;  }
    score operator+()
    {   score temp;
        val=val+1;
        temp.val=val;
        return temp;    }
    void show()
    {   cout<<val<<endl;    }
};
main()
{
    score s1,s2;
    s1.show();
    s2.show();
    +s1;
    s1=+s2;
    s1.show();
    s2.show();
}

【问题讨论】:

  • s1 = +s2;一样的东西
  • 哦,我现在看到了...谢谢
  • @sameeralakshitha 这是不正确的,你在想s1 += s2; 这不是一回事。相当于s1 = (+s2);,大多数情况下是s1 = s2;
  • @sameeralakshitha s1=+s2;s1 = s1 + s2; 不同。 s1=+s2; =&gt; s1 = +s2;s1+=s2 =&gt; s1 = s1 + s2;
  • 离题:那个 + 运算符违反了约定。 + 不应该修改它被调用的对象,就像 3 = 2+1 不修改 2 或 1 的值一样。更多:Operator overloading

标签: c++ operator-overloading


【解决方案1】:
 s2=+s1

仅意味着将一元 operator+() 应用于随 operator=() 的参数提供的 rvalue

归结为与

相同的陈述
s2 = (+s1);

没有像 operator+=() 这样的组合运算符。

这根本没有效果,除非这些运算符函数针对特定(非原始)类型进行了重载。

【讨论】:

  • 我相信operator+ 被首先调用。根据我对您的回答的理解,这似乎暗示了相反的意思。
  • @FrançoisAndrieux 与什么相反?
  • 您的回答说operator+ 是在operator= 的结果上调用的,但应该是operator= 应该与operator+ 的结果一起行动。 s2.operator=(s1.operator+());
  • 事实的反面;弗朗索瓦是对的,但我认为这只是您所说的“提供操作员=”的语言障碍
  • 好一点。现在可能已经足够好了(特别是因为无论如何这是一个骗局)
猜你喜欢
  • 2014-03-23
  • 2017-02-17
  • 2011-01-22
  • 2019-09-12
  • 2020-12-12
  • 2013-09-02
  • 2014-01-31
  • 1970-01-01
相关资源
最近更新 更多