为什么超载!运算符需要const返回

时间:2013-01-05 01:06:06

标签: c++ operator-overloading

g ++ 4.5.3(cygwin)

class SlipDatum {
public:
   bool operator!();
   long operator~();
}

bool SlipDatum::operator!() { }
long SlipDatum::operator~() { }

运营商!()期待原型:     const bool operator!();

但是运算符〜()没有任何期望。任何原因为什么?

编译错误是:

  

SlipDatum.cpp:104:15:错误:'const slip :: BOOL slip :: SlipDatum :: operator!()'的原型与类中的任何一个都不匹配   'slip :: SlipDatum'SlipDatum.h:15295:18:错误:候选人是:bool   滑:: SlipDatum ::运算!()

2 个答案:

答案 0 :(得分:3)

很难弄清楚你的意思究竟是什么,但在很多情况下,在课程定义后遗漏;会导致各种奇怪和混乱的错误信息。虽然在我的GCC版本中,我无法复制你的。

无论如何,在类定义的末尾添加;

答案 1 :(得分:1)

class SlipDatum {
public:
   bool operator!();
   long operator~();
};

bool SlipDatum::operator!() { return false; }
long SlipDatum::operator~() { return 0; }

int main() {
  SlipDatum unused;
}

此代码在gcc 4.3.4 gcc 4.5.1gcc 4.7.2

中编译得很好

你在gcc 4.5.3(cygwin)中发现了一个奇怪的错误,或者你的问题是你实际上没有从一个期望返回值的函数返回,或者你的问题形成得很糟糕,或者你的错误在你的帖子和我的回答之间的差异。