2010-09-01 12 views
22

Hat ein neues Symbol die C++ - Sprachspezifikation hinzugefügt, während ich unter einem Felsen geschlafen habe?Was ist das "^" Symbol in C++?

Ich traf nur die folgende Frage:

Restrict Text Box to only accept 10 digit number

Welches ist das '^' Symbol irgendwie Teil von C++ ist (nicht in der alten Bedeutung eines bitweise XOR)

Ist schlägt vor, dass das so?

Wenn ja, was bedeutet das? (Ich habe versucht, google the question, aber Google nicht mit befriedigenden Antworten kommen)

+3

Wenn Sie '^' mögen, werden Sie lieben, dass sie auch '&' durch '%' für Verweise auf verwaltete Typen ersetzen. Es ist so, als ob sie sich entschieden hätten, es zu vermasseln. Lass uns einfach neue Operatoren erfinden und trotzdem die Sprache "C++" nennen. –

+0

@Ken Simon: Seit wann hat C++ Typen verwaltet? C# hat Typen verwaltet, aber nicht * Standard * C++. –

+0

@Ken: Die Sprache heißt nicht C++, sie heißt C++/CLI. Ein Grund, warum es so heißt, könnte sein, dass einfaches C++ eine vollständige Teilmenge von C++/CLI ist (d. H. Jedes konforme C++ - Programm ist auch ein konformes C++/CLI-Programm). –

Antwort

30

In C++ ist das "^" Symbol der bitweise exklusive oder (xor) -Operator. Für ein einzelnes Bit haben Sie 0^0 = 1^1 = 0 und 0^1 = 1^0 = 1.

In der Frage, die Sie beziehen sich auf es ist jedoch Teil von Microsoft spezielle Syntax für C++ Entwicklung auf der .NET-Plattform als C++/CLI oder bekannt Es funktioniert einfach.

Speicher auf .NET ist Müll gesammelt und Verweise auf Objekte müssen verfolgt werden. Dies macht es unmöglich, diese Objekte mit einem normalen C++ - Zeiger zu referenzieren. Microsoft hat beschlossen, das "^" - Symbol zu verwenden, um eine Variable zu deklarieren, die einem Zeiger ähnelt, der auf ein Objekt auf dem verwalteten Heap verweisen kann.

^ (Handle to Object on Managed Heap)

9

In der referenzierten Antwort, es ist nicht Teil der Standard-C++ Sprache, es ist Teil der C++/CLI Sprache, die Microsoft zusammen für .NET-Interop-gepflasterte. In dieser Sprache bedeutet^einen "Zeiger auf verwalteten Speicher".

1

Es ist nicht Teil von Standard C++. Es ist Teil von Managed C++ (Microsoft-Sprache ähnlich wie C++ für .NET). Es bedeutet "eine Referenz auf ----" in der gleichen Weise wie ein "*" bedeutet "Ein Zeiger auf -----" ist Standard C++.

+0

Es ist Teil des Standards C++, in dem es der bitweise XOR-Operator ist. – You

+7

Ja, und "*" bedeutet auch "multiplizieren", aber darüber reden wir hier nicht. –

+0

Doppel-Nr. '^' ist ein ** Tracking-Handle ** zu ---- Referenz bedeutet etwas anderes in C++, und '%' ist das verwaltete Äquivalent zur Standard-C++ - Referenz '&'. Und das ist in C++/CLI. In den nicht mehr existierenden "Managed Extensions for C++" wurde es als '__gc *' geschrieben, was mit Garbage Collector kompatible Zeiger bedeutet. –

3

Die '^' Syntax bezieht sich auf eine tracking reference in C++/CLI, eine Microsoft-Erweiterung zu C++, die Interaktion mit verwaltetem Code ermöglicht.

+0

Nein, ist es nicht. '%' ist eine Tracking-Referenz.'^' ist ein Tracking-Handle. (Lesen Sie die Seite, die Sie verlinkt haben.) –

12

In Visual C++ stellt ^ ein Handle für ein verwaltetes Objekt dar. Im Wesentlichen wäre das in C# eine Referenz. Ordnen Sie sie mit gcnew statt new zu, und sie werden Müll für Sie gesammelt werden. So interagiert Visual C++ mit der CLI.