9 Stimmen

Warum ist string string erlaubt und int int wird vom Compiler nicht zugelassen?

Ich versuche gerade zu überprüfen, ob der Compiler Typnamen als Variablennamen zulässt. Als ich versuchte

int int;

Es meldete einen Fehler und sagte

Fehler C2632: 'int' gefolgt von 'int' ist illegal

Aber als ich versuchte

#include <string>
using namespace std;

int main()
{
    string string;
}

Es gab keine Fehlermeldung. Beide string y int sind Datentypen.

Warum erlaubt der Compiler string und erlaubt nicht int ?

EDIT: enthält aktualisiert.

EDIT: Einige Leute sind der Meinung, dass int keine Klasse ist. In diesem Fall, warum unten stehende Zeile erlaubt ist.

int a(10);

funktioniert er ähnlich wie der Konstruktor einer Klasse.

22voto

codaddict Punkte 426877

string ist keine C++ reserved word aber int ist, und ein reserviertes Wort kann nicht als Bezeichner verwendet werden.

Und seine syntaktisch Es ist gut, wenn der Klassenname und der Objektname gleich sind.

class test {}; 
int main() { 
        test test; // test is an object of type test.
}

6voto

Chubsdad Punkte 23861

int ist ein C++-Schlüsselwort. In der zweiten Deklaration deklariert 'string string' ein Objekt vom Typ 'std::string' . Danach wird der Name "string" ausgeblendet 'std::string' in einem unqualifizierten Nachschlagewerk

#include <string>
using std::string;

int main(){
    string string;

    string s;  // Error
}

3voto

yfeldblum Punkte 64211

int ein Schlüsselwort ist, während string ist der Name einer Klasse in der Standardbibliothek, aber kein Schlüsselwort.

1voto

James Curran Punkte 98228

string ist eigentlich kein "Datentyp" in demselben Sinne wie der int ist. int ist ein "systemeigener Typ" und als solcher ist der Text "int" ein Schlüsselwort.

string ist nur eine "benutzerdefinierte" Klasse (obwohl der "Benutzer", der sie definiert hat, in diesem Fall das C++-Standardisierungskomitee ist). Aber als solche ist "string" pas ein Schlüsselwort.

Also int int sind zwei Schlüsselwörter zusammen, aber string string ist lediglich die Definition einer Variablen namens "string" vom Typ "string". Der C++-Compiler kann die beiden Verwendungen von "string" auseinanderhalten (aber es ist keine gute Idee, dies zu tun, da, wie Sie gezeigt haben, Programmierer dies oft nicht können).

0voto

Billy ONeal Punkte 100691

Nun, da andere die Antwort im Wesentlichen schon gepostet haben, werde ich fortfahren und posten, was ich meinte...

Da die zweite Antwort kompiliert werden kann, nehme ich an, dass Sie using namespace std; in Ihrer Datei zu verwenden (was im Allgemeinen keine gute Idee ist; ich verstehe nicht, warum man C++-Anfängern rät, dies zu tun).

Wenn der Compiler zur Auflösung der ersten string kann die Klasse im Namespace gefunden werden std . Die zweite Verwendung von string ist einfach der Name der Variablen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X