【问题标题】:Unknown C++ braces syntaxis [duplicate]未知的 C++ 大括号语法 [重复]
【发布时间】:2016-05-28 20:53:53
【问题描述】:

看看这个sn-p:

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");
            }
        }
    }
}

如果这段代码是合法的,这些块是如何工作的?

【问题讨论】:

  • { 开始一个新的块作用域,} 结束一个块作用域。可以开一个block来限制代码的范围。
  • 据我所知,有一些多余的{} 块。
  • 有正当理由否决这个问题吗? (缺乏还是研究?)

标签: c++ curly-braces


【解决方案1】:

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

【讨论】:

  • 没错,谢谢。
【解决方案2】:

如果s; 是有效语句,那么{ s; }{{ s; }} 也是如此。

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-10-05
    • 2018-03-10
    • 1970-01-01
    • 2021-11-20
    • 2017-09-10
    • 2016-10-13
    • 2012-04-07
    • 2015-03-02
    相关资源
    最近更新 更多