这可能是一个愚蠢的问题,但我在阅读本文时尝试使用安全布尔成语时对编译错误感到困惑。下面是我的代码,我已经指出了 main() 函数中出现错误的行。
// is OK case
class BoolVer_OK {
bool m_OK;
public:
BoolVer_OK(bool ok) : m_OK(ok){}
operator bool() { return m_OK; }
};
// Not OK Case
class BoolVer_NotOK {
bool m_notOK;
public:
BoolVer_NotOK(bool ok) : m_notOK(!ok){}
bool operator !() const{ reportexecution; return !m_notOK; }
};
main()
{
BoolVer_OK ok(true);
BoolVer_NotOK notOK(true);
ok<<1; // Line#1 is valid
notOK << 1; // Line#2: error: inavlid operand to binary expression ('BoolVer_notOK' and 'int')
return 0;
}
为什么我们在 #Line2 时没有在 #Line1 出现错误。两者都在运算符之前产生一个布尔值<<
。