c++ - 这个 bool 方法怎么能编译无误呢?

标签 c++

我的 C++ 程序中有这个方法,在 Visual Studio 2012 中,标准编译器:

bool FPS::frameRenderingQueued(const Ogre::FrameEvent &evt) {
    bool result = BaseApplication::frameRenderingQueued(evt);
    if (!result) {
        Ogre::LogManager::getSingleton().logMessage("Exiting, result of frame rendereing queued: " + result);
        return result;
    }
    for (int x = 0; x < 20; x++) {
        for (int z = 0; z < 20; z++) {
            robotAnimation[x][z]->addTime(evt.timeSinceLastFrame);
            tileSceneNode[x][z]->translate(tileSceneNode[x][z]->getOrientation() * Ogre::Vector3::UNIT_X * 35.0f * evt.timeSinceLastFrame);
        }
    }
}

它如何编译而不给出任何错误?我提醒您,结果无法预测。

当我运行它时,发生了这种情况:函数本身返回了 false(因为如果 frameRenderingQueued() 返回 false,Ogre 将关闭。但是从未到达分支 if (!result) { ... }。因此行为是不可预测的。

后来当我在函数末尾添加 return true; 时,一切都按预期工作。

那么这个损坏的方法如何编译得很好呢?

最佳答案

编译器不需要诊断该错误,因为通常静态分析不可能确定足够复杂的函数是否可以运行结束。相反,您会得到未定义的行为。

如果您启用了警告,希望您的编译器在这种情况下会发出警告。

关于c++ - 这个 bool 方法怎么能编译无误呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19400542/

相关文章:

c++ - 用 Eigen3 对两个矩阵进行插值

c++ - 大整数类的位操作?

c++ - CRTP 复制方法警告潜在的内存泄漏

c++ - 代码块调试预处理器

c++ - 将数字设置为小数点后的 float

c++ - CMake 添加带有子目录的库

c++ - 关于C++中动态多维数组的结构的一个小问题

c++ - 使用 SDL 的硬件缓冲,关于它如何工作的问题

c++ - 如何通过ROS将真实感数据传输到其他设备

c++ - YASM 程序集在 jitted 函数中调用 stdout.write