2016-05-26 4 views
2

Der auskommentierte Ausdruck unten kompiliert nicht, da es im globalen Bereich ist. Aber wo finde ich im C++ Standard etwas, das sich auf diese Einschränkung bezieht? Soweit ich mich erinnere, sind Ausdrücke im globalen Gültigkeitsbereich nur erlaubt, globale Objekte zu initialisieren. Ich habe bereits Kapitel 5 Ausdrücke, ohne Erfolg untersucht.In C++ sind Ausdrücke im globalen Gültigkeitsbereich nur zulässig, um globale Objekte zu initialisieren. Wo finde ich das im Standard?

#include <iostream> 
//std::cout.setf(std::ios_base::hex, std::ios_base::basefield); 


int main() 
{ 
    std::cout.setf(std::ios_base::hex, std::ios_base::basefield); 
} 
+3

Ich denke, eine bessere Art zu sagen ist, dass "nur Deklarationsanweisungen im Namensraumbereich erlaubt sind". –

+1

@KerrekSB "nur Deklarationen" ist mehr wie es. "Deklarationsanweisungen" ist eine begrenzte Teilmenge von Deklarationen –

+0

@ T.C .: Ja, richtig. Ich war davor schon verwirrt. Vielen Dank. –

Antwort

6

Ich glaube es alles geht nach unten zu 3.5-Programm und Verknüpfung:

1) Ein Programm besteht aus einer oder mehreren Übersetzungseinheiten (Satz 2) miteinander verbunden sind. Eine Übersetzungseinheit besteht aus einer Folge von Deklarationen.
Übersetzung Einheit:
Erklärung-Seq opt

dieser Syntaxbeschreibung Nach Sie finden, was in einer Erklärung-Seq erlaubt ist und was in jeder Erklärung erlaubt. Und wie man sehen kann, ist eine regelmäßige Anweisung nicht erlaubt bei Übersetzungseinheit Ebene.