gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-31 00:15:26 25 4
gpt4 key购买 nike

我的 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com