关于运算符重载

时间:2014-10-08 14:04:15

标签: c++ operator-overloading

我的教授让我找到c ++中的哪些运算符不能超载,原因是什么。我发现点(。),范围分辨率(::),条件(?:),sizeof()运算符不能重载。任何人都可以告诉我原因吗?

1 个答案:

答案 0 :(得分:0)

struct Troll
{
  int money = 0;
  int problems = 0;
  float cant_touch_this = 0.0;

  int& operator.(const std::string& member_name)
  {
    if (member_name == "money")
      return problems;
    else if (member_name == "problems")
      return money;
    else if (member_name == "cant_touch_this")
      throw cant_touch_this;
    else
      throw 0;
  }
};

int main()
{
 Troll t;

 t.money = 42;
 t.problems = 3;
}

在编写上面的片段绝对不能编译时,我问自己多个问题:

  • operator.返回类型应该是什么?
  • 应该采取什么参数?
  • 我如何处理我扔的情况?
  • 为什么我需要运行时开销来评估编译时成员?
  • 通过切换我的会员,其他开发人员可以随身携带吗?
  • 此列表可以继续......

这就是为什么你不能重载点(。)运算符的原因,并且你会通过尝试重载不可重载的运算符来问自己类似的问题。

聪明的头脑可能会找到这些问题的正确答案,但这种思想要么不是天生的,要么不是c ++委员会的成员,不是标准功能提案的粉丝,或者根本不关心,因为他没有&# 39;不需要这个功能。