c ++错误; 我该如何解释它的含义?

Abh*_*nav 1 c++ objective-c gcc-4.2

这可能是一个愚蠢的事情要问,但我很困惑与编译错误,而试图在阅读使用安全布尔成语文章.下面是我的代码,我已经指出了我在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;
}
Run Code Online (Sandbox Code Playgroud)

当我们到达#Line2时,为什么我们没有在#Line1出错.两者都会在<<运算符之前产生一个布尔值.

Nim*_*Nim 7

ok支持operator bool,C++有这个很好的功能,称为隐式转换和升级,在这种情况下,对于二元移位运算符<<,bool它被提升为a int,然后将其移动1.

在第二种情况下,您没有提供该运算符,因此没有任何内容可以隐式转换(和提升)为int,并且您得到错误.!notOk在班次之前尝试打电话,现在有一个bool,将被提升.