繁体   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