这是我的代码简化
private static boolean isTrue()
{
return false;
}
public void Update()
{
if (isTrue())
doSomething();
}
Run Code Online (Sandbox Code Playgroud)
由于一些奇怪的原因doSomething()总是被执行,无论isTrue()返回什么.为什么?
编辑:关闭if语句后,我在屏幕外的某个地方有一个分号,如下所示:
if (false);
doSomething();
Run Code Online (Sandbox Code Playgroud)
像这样doSomething()总是被执行.

你可以清楚地看到args []的最高索引是2,但迭代器不知何故得到3.
编辑:评论的Thread.Sleep神奇地修复了问题.
我记得在某个会议上看过它,但找不到任何相关信息.
我想要的东西:
lock(_somelock)
{
if (_someBool)
return;
DoStuff();
} // Implicit unlock
Run Code Online (Sandbox Code Playgroud)
代替:
lock(_somelock);
if (_someBool)
{
unlock(_somelock);
return;
}
DoStuff();
unlock(_somelock);
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,代码变得非常臃肿,有多个早期返回.显然,人们可以制作另一个功能来处理锁定/解锁,但它更好吗?
可以使用C++ 11标准库吗?
伪代码,我不知道这是否编译,但你明白了.
class DataHolder
{
void GetData(float* ptr)
{
ptr = dataNeededByOtherClass;
}
float* dataNeededByOtherClass; // Initialized and modified elsewhere
};
class DataUser
{
void DoStuff()
{
float* ptrToData;
dataHolder->GetData(ptrToData);
// ptrToData points to garbage Why?
ptrToData = dataHolder->dataNeededByOtherClass;
// ptrToData now points to the correct data
}
};
Run Code Online (Sandbox Code Playgroud)
我在这看什么?