簡體   English   中英

object.operator bool()和(bool)對象有什么區別?

[英]What is the difference between object.operator bool() and (bool) object?

我有一個類,我明確地重載了​​運算符bool,如下所示: -

class Foo {
  explicit operator bool() {
    // return_something_here
  }
};

但是,當我在gdb中運行以下兩個時,我得到: -

gdb) p fooobj.operator bool()
$7 = true
gdb) p (bool)(fooobj)
$8 = false

兩次調用之間有什么區別?為什么它們會返回不同的東西?

編輯: - 我正在使用clang編譯器。

注意: - 第二個值(false)是我想要使用第一個語法返回的正確值。 我正在使用codegen所以我無法完全控制c ++生成的內容,以防有人好奇為什么我不只是使用第二種語法。

即使在這種情況下,兩者之間的差異仍然是一個懸而未決的問題。

我剛剛運行了一些快速測試,似乎gdb不能處理用clang編譯的代碼。 這是一個測試程序:

#include <iostream>

using namespace std;

class Foo {
public:
  Foo() : m_Int(0) {}
  operator bool() {
    return true;  // also tried false here
  }
private:
  int m_Int;
};

int main()
{
  Foo f;
  if (f.operator bool()) cout << "operator bool is true.\n";

  if ((bool)f)  cout << "(bool)f is true.\n";

  return 0;
}

運行二進制文件時,輸出是預期的,即(bool)f與f.operator bool()相同,無論編譯器如何。 但是,如果gdb與使用g ++的代碼構建一起使用,則p命令行為正確。 然而,當gdb運行在使用clang ++構建的代碼上時,我得到:

(gdb) print f.operator bool()
Couldn't find method Foo::operatorbool
(gdb) 

我在Ubuntu 14.04上運行clang v.3.4,gcc v.4.8.4。

實際上,快速搜索顯示: 是否可以使用lldb調試gcc編譯的程序,或使用gdb調試clang編譯的程序? 所以,我嘗試了lldb ,它按預期工作。 這與我正在調查時添加的評論一致。

暫無
暫無

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

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