2016-12-26 45 views
0

今天我在想,直到我意识到它只有compiles带有布尔参数。带有bool参数的构造函数允许编译Java代码的代码

#include <iostream> 
using namespace std; 
class Foo { 
    bool _param; 
public: 
    Foo(bool param) { 
     _param = param; 
    } 
    void say() { 
     cout << "Param is "<< _param << endl; 
    } 
}; 

int main() { 
    Foo foo = new Foo(true); 
    foo.say(); 
    return 0; 
} 

我也注意到,构造函数被调用两次,那么我的猜测是,通过“新富(真)”创建的指针被浇铸为布尔值。是吗?如果是这样,为什么它不适用于其他参数类型?还有什么我没有看到的?

+1

标记构造函数'explicit'可能会让你更快找到错误。 – Jarod42

回答

4
Foo foo = new Foo(true); 

相当于

Foo foo(new Foo(true)); 

new指针结果变成true

这就是为什么它编译,你有内存泄漏。

2

我会加到πάντα ῥεῖ的回答。它(似乎)仅适用于bool的原因是,自从黎明以后,可以使用指针作为布尔操作数。所以隐式转换必须存在。

+0

这是我失踪的作品。谢谢。 –

相关问题