2010-09-01 34 views
22

Có một biểu tượng mới tham gia đặc tả ngôn ngữ C++ trong khi tôi đang ngủ dưới tảng đá không?Biểu tượng "^" trong C++ là gì?

Tôi chỉ gặp phải những câu dưới đây:

Restrict Text Box to only accept 10 digit number

nào cho thấy biểu tượng '^' là bằng cách nào đó một phần của C++ (không phải trong ý nghĩa di sản của một Bitwise-XOR)

Is thế này?

Nếu có, điều đó có nghĩa là gì? (Tôi đã cố gắng google the question nhưng Google không đưa ra câu trả lời thỏa đáng)

+3

Nếu bạn thích '^', bạn sẽ thích rằng chúng cũng thay thế '&' bằng '%' để tham chiếu đến các loại được quản lý. Nó giống như họ chỉ quyết định vít nó, chúng ta hãy chỉ phát minh ra các nhà khai thác mới và vẫn gọi ngôn ngữ "C++". –

+0

@Ken Simon: Từ khi nào C++ đã quản lý các loại? C# đã quản lý các loại, nhưng không * chuẩn * C++. –

+0

@Ken: ngôn ngữ không được gọi là C++, nó được gọi là C++/CLI. Một lý do tại sao nó được gọi như vậy có thể là đồng bằng C + + là một tập hợp con hoàn chỉnh của C++/CLI (tức là bất kỳ chương trình C++ phù hợp nào cũng là một chương trình C++/CLI phù hợp). –

Trả lời

30

Trong C++ biểu tượng “^” là toán tử độc quyền hoặc (xor). Đối với một bit, bạn có 0^0 = 1^1 = 00^1 = 1^0 = 1.

Tuy nhiên, trong câu hỏi bạn đang đề cập đến nó là một phần của cú pháp đặc biệt của Microsoft cho phát triển C++ trên nền tảng .NET được gọi là C++/CLI hoặc Nó chỉ hoạt động.

Bộ nhớ trên .NET là rác được thu thập và tham chiếu đến đối tượng sẽ phải được theo dõi. Điều này làm cho nó không thể tham chiếu các đối tượng này bằng cách sử dụng một con trỏ C++ bình thường. Microsoft đã quyết định sử dụng lại biểu tượng “^” để khai báo một biến tương tự như một con trỏ có thể tham chiếu đến một đối tượng trên heap được quản lý.

^ (Handle to Object on Managed Heap)

9

Trong câu trả lời tham khảo, nó không phải là một phần của ngôn ngữ tiêu chuẩn C++, nó là một phần của ngôn ngữ C++/CLI rằng Microsoft gom góp cho .NET interop. Trong ngôn ngữ đó,^nghĩa là "con trỏ tới bộ nhớ được quản lý".

1

Nó không phải là một phần của Standard C++. Đó là một phần của Managed C++ (ngôn ngữ của Microsoft giống như C++ for .NET). Nó có nghĩa là "một tham chiếu đến ----" theo cùng một cách "*" có nghĩa là "Một con trỏ đến -----" là Chuẩn C++.

+0

Nó là một phần của tiêu chuẩn C++, trong đó nó là toán tử XOR bitwise. – You

+7

Vâng, và "*" cũng có nghĩa là "nhân" nhưng đó không phải là những gì chúng ta đang nói ở đây. –

+0

Không. '^' là một ** xử lý theo dõi ** đến ---- Tham chiếu có nghĩa là một cái gì đó khác trong C++, và '%' là tương đương được quản lý với tham chiếu C++ chuẩn '&'. Và đây là trong C + +/CLI. Trong phần "Extensions Extensions for C++" không còn tồn tại, nó được viết dưới dạng '__gc *' có nghĩa là con trỏ tương thích với bộ thu gom rác. –

3

Cú pháp '^' đề cập đến một tracking reference trong C++/CLI, một phần mở rộng của Microsoft cho C++, cho phép tương tác với mã được quản lý.

+0

Không, không phải. '%' là tham chiếu theo dõi.'^' là một xử lý theo dõi. (Đọc trang bạn đã liên kết.) –

12

Trong Visual C++, ^ đại diện cho một xử lý đối tượng được quản lý. Về cơ bản những gì trong C# sẽ là một tham chiếu. Phân bổ chúng với gcnew thay vì new và chúng sẽ được thu gom rác cho bạn. Đây là cách Visual C++ tương tác với CLI.

Các vấn đề liên quan