我有一个方法,我在堆上创建对象并返回一个布尔值,指示它是否运行良好。 我不是100%肯定我的布尔作业虽然在(1);这是合法的吗?
bool ret = true;
if (ret = !mRenderBackend) // make sure mRenderBackend is NULL
{
if (mEngineSettings.GetRenderBackend() == OPENGL)
ret = mRenderBackend = mMemoryAllocator.AllocateObject<RenderOpenGL>(); // (1). AllocateObject returns either NULL or object address
}
return ret;
由于
答案 0 :(得分:2)
你根本不需要bool,这有点让人难以理解。我会亲自做点什么,
if (mRenderBackend == NULL) // make sure mRenderBackend is NULL
{
if (mEngineSettings.GetRenderBackend() == OPENGL)
mRenderBackend = mMemoryAllocator.AllocateObject<RenderOpenGL>(); // (1). AllocateObject returns either NULL or object address
}
return (mRenderBackend != NULL);
答案 1 :(得分:0)
是的,合法。
if (ret = !mRenderBackend)
相当于
ret = !mRenderBackend;
if(ret)
相当于
ret = (mRenderBackend == 0);
if(ret)
请注意,ret
只能定义为零/非豁免,这在您的代码中看起来很安全。