1

ヒープ上にオブジェクトを作成し、それがうまくいったかどうかを示すブール値を返すメソッドがあります。(1)では、boolの割り当てについて100%確信が持てません。これは合法ですか?

    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;

ありがとう

4

2 に答える 2

2

ブール値はまったく必要ありません。追跡が難しくなります。私は個人的に次のようなことをします

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);
于 2012-09-28T19:34:32.260 に答える
0

はい、合法です。

if (ret = !mRenderBackend)  

と同等です

ret = !mRenderBackend;
if(ret)

と同等です

ret = (mRenderBackend == 0);
if(ret)

retコードで安全に見えるゼロ/非ゼロまでしか定義されないことに注意してください。

于 2012-09-28T19:35:53.833 に答える