【问题标题】:Constructor with bool param allows Java-esque code to compile带有 bool 参数的构造函数允许编译 Java-esque 代码
【发布时间】:2016-12-26 11:16:06
【问题描述】:

今天这让我大吃一惊,直到我意识到它只有 compiles 和布尔参数。

#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;
}

我还注意到构造函数被调用了两次,那么我的猜测是“new Foo(true)”创建的指针被强制转换为布尔值。是这样吗?如果是这样,为什么它不适用于其他参数类型?还有什么我没看到的吗?

【问题讨论】:

  • 标记构造函数explicit 可能会让你更快地找到错误。

标签: c++


【解决方案1】:
Foo foo = new Foo(true);

等价于

   Foo foo(new Foo(true));

new的指针结果变成true

这就是它编译的原因,你有内存泄漏。

【讨论】:

    【解决方案2】:

    我将添加到πάντα ῥεῖ 的答案。它(似乎)仅适用于bool 的原因是,从 诞生之初就可以将指针用作布尔操作数。所以隐式转换一定存在。

    【讨论】:

    • 那是我缺少的部分。谢谢。
    猜你喜欢
    • 2021-11-25
    • 2013-02-26
    • 1970-01-01
    • 2016-02-26
    • 2020-11-06
    • 1970-01-01
    • 2019-10-30
    • 1970-01-01
    • 2019-03-02
    相关资源
    最近更新 更多