Bool赋值运算符

时间:2012-09-28 19:29:41

标签: c++ operators boolean

我有一个方法,我在堆上创建对象并返回一个布尔值,指示它是否运行良好。 我不是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;

由于

2 个答案:

答案 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只能定义为零/非豁免,这在您的代码中看起来很安全。