![](/img/trans.png)
[英]What's the difference between' bool operator()' and 'bool operator <'?
[英]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.