2016-05-28 6 views
-2

Schauen Sie sich das Snippet:Unbekannt C++ Zahnspange 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"); 
      } 
     } 
    } 
} 

Wenn dieser Code ist echt, wie funktionieren diese Blöcke?

+0

'{' startet einen neuen Block Umfang und '} 'beendet einen Blockbereich. Es ist in Ordnung, einen Block zu öffnen, um den Umfang des Codes zu begrenzen. –

+0

Es gibt einige überflüssige '{}' Blöcke soweit ich sehen kann. –

+2

Gibt es einen legitimen Grund, diese Frage abzustimmen? (Mangel oder Forschung?) –

Antwort

2

Sie sind einfach Blöcke, die Umfang einführen und ihren Inhalt verbergen. Perfekt gültig.

+0

Das ist richtig, danke. – Adflixit

2

Wenn s; eine gültige Aussage ist, dann ist das auch { s; } und {{ s; }} und so weiter.

Das Hinzufügen redundanter Klammern ist vollkommen legitim, aber völlig sinnlos.

Die interessante Frage ist, warum jemand Code auf diese Weise geschrieben hat. Meine Vermutung ist, dass der Autor sich Sorgen macht, wann lokale Variablen zerstört werden. Aber fast immer ist das die falsche Sache, um die man sich sorgen muss - die Klarheit des Codes übertrumpft fast alles.

(Es gibt gelegentlich Zeiten, in denen scheinbar redundante Klammern benötigt werden - in einer switch-Anweisung, zum Beispiel - aber der Code, den Sie zeigen, ist nicht einer von denen.)