簡體   English   中英

C ++錯誤; 我應該如何解釋其含義?

[英]c++ error; how should i interpret its meaning?

這可能是一個愚蠢的事情要問,但我很困惑與編譯錯誤,而試圖在閱讀使用安全布爾成語文章。 以下是我的代碼,並指出了在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上出錯。 兩者均導致<<運算符之前的布爾值。

ok支持operator bool ,並且C ++具有此出色的功能,稱為隱式轉換和提升。在這種情況下,對於二進制移位運算符<<bool值被提升為int ,然后將其移位1。

在第二種情況下,您沒有提供該運算符,因此沒有任何隱式轉換(和提升)為int的操作,並且您會得到錯誤。 嘗試在!notOk前致電!notOk ,現在有一個布爾值,它將被提升。

我認為編譯器不會自動插入對operator!的調用operator! 然后取而代之,以獲取所需的bool 根據我在您提供的鏈接中看到的內容,他們在兩次否定的情況下進行測試!!

ok<<1;  // Line#1     is valid
notOK << 1; // Line#2: error: inavlid operand to binary expression ('BoolVer_notOK' and 'int')

發生這種情況是因為ok被隱式轉換為bool (重載運算符),而notOK沒有該運算符。

測試以下代碼:

  BoolVer_OK ok(true);
  BoolVer_NotOK notOK(true);
  int z = ok<<1;  // is valid
  //notOK << 1; // error: inavlid operand to binary expression ('BoolVer_notOK' and 'int')
  int x = false << 1;
  return 0;

移位運算符左側的布爾值將轉換為int,然后進行移位。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM