布尔返回 24

Posted

技术标签:

【中文标题】布尔返回 24【英文标题】:bool returning 24 【发布时间】:2015-02-14 00:28:25 【问题描述】:

我正在用 C++ 创建一个库,并且有一个总是错误的布尔值,但是当我从另一个项目打印它时,它是 24。

库代码

void Window::update() 
    closeRequested = false;

其他项目

int main(int argc, char **argv) 
    init();
    wnd = new Window();

    while (1 == 1) 
        wnd->update();
        std::cout << wnd->closeRequested << std::endl;
    

    wnd->~Window();
    end();
    return 0;

【问题讨论】:

在窗口类中。 首先,欢迎来到 ***。 你不应该直接调用析构函数。而是使用delete(但在这种情况下,您似乎甚至不需要使用new 分配的内存)。 closeRequested的定义是什么? 它们是一个 SDL 窗口,它会检查是否按下了关闭按钮。 【参考方案1】:

在 C++ 中,对于 true0 对于 false,布尔变量总是返回 1。您获得不同值的事实意味着内存损坏,或者您没有获得布尔值。

我的投票是第二个。如果对象的定义在两个不同的源文件中不同,则对象的内存布局可能会发生变化,您将获得与写入的值不对应的部分对象。

对象布局的不匹配可能以不同的方式引起。一些常见的:

两个源文件之间的结构填充设置不同。 不同的 typedef 或 #define 宏导致成员的类型不同。 在一个源与另一个源中评估不同的条件宏。

【讨论】:

我其实认为 0 = False 非零 = True,不一定是 1。 int isTrue = 24,如果 isTrue 将评估为 true。 我该如何解决这个问题? @ventsyv 如果您正在评估任何其他类型的整数类型,则为 true,但不是 bool @Lewis 你只需要深入挖掘才能找到原因。一个好的第一步是在两个地方的对象上使用sizeof,看看它是否匹配。 @Lewis:我要尝试的第一件事是进行干净的重建。确保所有内容都使用相同版本的标头构建。

以上是关于布尔返回 24的主要内容,如果未能解决你的问题,请参考以下文章

从调用 Int 的方法返回布尔值

带有布尔返回的方法

Codeigniter URI 段返回布尔值

为啥这个 if 语句不返回布尔值?

在 postgresql 中,如何在 jsonb 键上返回布尔值而不是字符串?

如何在 C 中使用布尔数据类型?