未知的C ++支持syntaxis

时间:2016-05-28 20:53:53

标签: c++ curly-braces

请看这个片段:

void Sample_Compositor::createEffects(void)
{
    Ogre::CompositorPtr comp3 = Ogre::CompositorManager::getSingleton().create("Motion Blur", Ogre::ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME);
    {
        {
            Ogre::CompositionTargetPass *tp = t->getOutputTargetPass();
            tp->setInputMode(Ogre::CompositionTargetPass::IM_NONE);
            {
                Ogre::CompositionPass *pass = tp->createPass();
                pass->setType(Ogre::CompositionPass::PT_RENDERQUAD);
                pass->setMaterialName("Ogre/Compositor/MotionBlur");
                pass->setInput(0, "sum");
            }
        }
    }
}

如果此代码合法,这些块如何工作?

2 个答案:

答案 0 :(得分:2)

它们只是引入范围的块,并隐藏其内容。完全有效。

答案 1 :(得分:2)

如果s;是有效的陈述,那么{ s; }{{ s; }}也是如此,等等。

添加多余的括号是完全合法的,但完全没有意义。

有趣的问题是为什么有人用这种方式编写代码。我的猜测是作者担心局部变量何时被破坏。但几乎所有的时间都是担心的错误 - 代码的清晰度几乎胜过任何事情。

(有时需要明显多余的括号 - 例如在switch语句中 - 但是你展示的代码不是其中之一。)