未知的 C++ 大括号语法
Unknown C++ braces syntaxis
看看这个片段:
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");
}
}
}
}
如果此代码是合法的,这些块是如何工作的?
它们只是引入作用域并隐藏其内容的块。完全有效。
如果 s;
是一个有效的陈述,那么 { s; }
和 {{ s; }}
也是如此。
添加多余的大括号是完全合法的,但完全没有意义。
有趣的问题是为什么有人这样写代码。我的猜测是作者担心局部变量何时被销毁。但几乎所有时候,担心这些都是错误的 - 代码的清晰度几乎胜过一切。
(有时显然需要多余的大括号 - 例如在 switch 语句中 - 但您显示的代码不是其中之一。)
看看这个片段:
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");
}
}
}
}
如果此代码是合法的,这些块是如何工作的?
它们只是引入作用域并隐藏其内容的块。完全有效。
如果 s;
是一个有效的陈述,那么 { s; }
和 {{ s; }}
也是如此。
添加多余的大括号是完全合法的,但完全没有意义。
有趣的问题是为什么有人这样写代码。我的猜测是作者担心局部变量何时被销毁。但几乎所有时候,担心这些都是错误的 - 代码的清晰度几乎胜过一切。
(有时显然需要多余的大括号 - 例如在 switch 语句中 - 但您显示的代码不是其中之一。)