In Bezug auf Ihren Beispielcode
int var = 10;
int main(int argc, char *argv[])
{
int var = 20; // this var
{
int var = 40;
cout << ::var; // I want to print `var` variable in main scope.
// But this command print global variable.
}
return 0;
}
& hellip; und das erklärte Ziel in dem Kommentar,
” Ich mag var
Variable in Hauptbereich drucken
& hellip; Sie können das tun, wie folgt, einfach ein alias für sie und fügte hinzu:
int var = 10;
int main()
{
int var = 20; // this var
{
auto& outer_var = var;
int var = 40;
cout << outer_var;
}
}
C++ bietet keinen Spielraum Bewältigungsmechanismus, die dies für Sie tun können. Wenn es einen solchen Mechanismus, z.B. relative Scope-Auflösung oder Funktionsnamen als Pseudo-Namespace-Namen, würde es vermutlich verwendet werden, und man würde dann zumindest einige Code sehen, die wegen der Verwendung desselben Namens für verschiedene Dinge innerhalb einer kurzen Strecke des Codes schwer zu verstehen wäre.Ein alternatives Sprachdesign ist wie C#, wo das Shadowing (wie das innere var
Schatten der äußeren var
) einfach verboten ist.
Ebenso bietet C++ keine Möglichkeit, zusätzliche Namen für den globalen Namespace bereitzustellen. Andere Namespaces können Alias sein, aber nicht der globale Namespace, so dass man ziemlich sicher sein kann, dass der globale Namespace nicht über etwas wie etwa companyname::counter
referenziert wird.
In C++ gibt es auch eine Einschränkung, welche Operatoren durch Namespace-Scope-Funktionen überladen werden können, wiederum um ein gewisses Maß an geistiger Gesundheit zu bieten, worauf man sich absolut verlassen kann. In Bezug auf diese letzte Begründung kenne ich das von Bjarne Stroustrup (dem Sprachschöpfer). In Bezug auf die Gründe für das Fehlen einer relativen Auflösung des Bereichs und das Fehlen von globalem Namensraum-Aliasing ist es nur eine qualifizierte Vermutung, dass es dasselbe ist, aber es liegt nahe. :)
Ich verstehe nicht, warum er minus bekommt er fragte eine anständige Frage – dreamBegin
Wenn Sie nach C fragen, verwenden Sie keine Funktionen, die nur in C++ in Ihrem Code verfügbar sind. C hat keinen Scope-Resolution-Operator ('::') und unterstützt nicht 'cout' usw. In C können Sie die globale' var' even nicht drucken - und Sie können nicht die versteckte (shadowed) 'int ausgeben var = 20; 'aus dem inneren Block. –