2011-06-18 42 views
9

Hãy để tôi làm rõ ý nghĩa của từ 'bình thường' C++ trước tiên - Tôi hiện đang đọc "Giải quyết vấn đề trong C++" của Walter Savitch. Theo tôi biết điều này không được viết riêng cho Microsoft hoặc Unix. Vì vậy, câu hỏi của tôi là, làm thế nào những gì tôi đang học trong cuốn sách này (mà tôi đang sử dụng để đạt được kiến ​​thức phổ quát của tôi về C++) khác với những gì tôi tiếp tục đọc về CLI C++?CLI/C++ chính xác là gì? Nó khác với C++ bình thường như thế nào?

CLI C++ chỉ là những gì tôi sẽ gặp phải nếu tôi sử dụng Visual C++? Tôi hoàn toàn bối rối.

Trả lời

11

C++/CLI, (Đôi khi C++/CLR) đề cập đến một ngôn ngữ được định vị ở đâu đó ở giữa C++ gốc và khung .NET.

Nó thường được sử dụng cho các ứng dụng mà bạn cần kết nối một số mã gốc (thuần túy C++) và mã được quản lý (như VB, C#, F #, v.v.).

C++/CLI là một con thú khác nhiều so với C++ thông thường. Và khi mọi người nói Visual C++, ý nghĩa có thể thay đổi tùy theo ngữ cảnh. Đôi khi chúng có nghĩa là C++ với lớp thời gian chạy ngôn ngữ chung (CLR) được kích hoạt, các thời điểm khác chúng có nghĩa là chỉ đơn giản là C++. Thật không may là có rất nhiều thuật ngữ khác nhau ngoài kia, và có rất nhiều từ ngữ sai, nhưng bạn có thể làm gì?

+0

Vì vậy, nếu tôi chỉ muốn sử dụng tiêu chuẩn C++, mẫu và tăng tôi sẽ không cần CLR? Tại sao tôi cần sử dụng CLR, nếu tôi muốn sử dụng các thư viện .NET? Cảm ơn – Jean

+1

Bạn sẽ sử dụng CLR bất cứ khi nào bạn lên kế hoạch gọi cho các thư viện .NET, hoặc nếu bạn muốn mã của bạn hoạt động tốt với mã .NET đang gọi nó. Nếu mong muốn của bạn là chỉ cần viết đồng bằng C++, thậm chí không bận tâm với C++/CLI. Cả hai đều có tên miền dự định của họ, nhưng nếu bạn đang viết C++ tinh khiết thì không cần CLR. –

+3

"* Cũng đôi khi C++/CLR *" Không - tên của ngôn ngữ là C++/CLI; nếu nó được gọi là C++/CLR, đó là một sai lầm của một người không biết gì tốt hơn. – ildjarn

6

C++ và C++/CLI khác nhau rất nhiều. C++/CLI là phiên bản .NET được quản lý của C++, do Microsoft tạo ra để cho phép một lớp từ .NET thành mã gốc.

+0

http://en.wikipedia.org/wiki/C%2B%2B/CLI –

+4

"* Visual C++ và C++/CLI khác nhau rất nhiều *" Tuyên bố này gây ra nhiều nhầm lẫn hơn giải quyết được tôi nghĩ. Visual C++ là một trình biên dịch, C++/CLI là một ngôn ngữ. – ildjarn

+0

@ildjarn: Tốt, tôi luôn thấy nó như là sự thực thi của Microsoft về C++. Sửa lỗi đó. – Xeo

1

C++/cli là phiên bản hiện tại của công cụ Visual C++ của Microsoft. (Có một thiết kế khác trước C++/cli)

C++/cli thực sự là hai phiên bản của C++ trong một. Có một trình biên dịch C++ tiêu chuẩn hóa cao và cũng là một phiên bản của C++ chạy trên máy ảo CLI. Rõ ràng là tiêu chuẩn C++ không bao giờ chạy trên máy ảo để xác định hai phương pháp tiếp cận ngôn ngữ.

Khi sử dụng, bạn có thể kết hợp mã không người lớn và mã được quản lý với nhau. "Không được quản lý" là mã được biên dịch giống như tiêu chuẩn C++. "Managed" là trình biên dịch mã cho mã byte bytecode của CLI (.Net). Microsoft có các API mở rộng cho cả mã được quản lý và không được quản lý. Với sản phẩm bạn có thể truy cập cả hai API.

Bạn có thể phát triển các ứng dụng chuẩn C++ bằng ngôn ngữ và công cụ, bạn chỉ cần cẩn thận không sử dụng các tiện ích mở rộng không chuẩn. Tôi đề nghị biên dịch trong trình biên dịch khác một lần trong một thời gian nếu bạn đang nghi ngờ. Phía được quản lý hoàn toàn không đạt tiêu chuẩn và thậm chí cả bên không được quản lý đều có các phần mở rộng không chuẩn.

PS Tôi không có chuyên môn nhưng tôi đã tò mò và đọc về điều này tuần trước. Tôi nghĩ câu hỏi của bạn xứng đáng là một câu trả lời. Chúc may mắn!

+0

"C++/cli là phiên bản hiện tại của công cụ Visual C++ của Microsoft." Đây là một chút không chính xác/gây hiểu nhầm. Visual Studio là bộ công cụ.C++/CLI là một trong những ngôn ngữ được hỗ trợ trong đó. – DuckMaestro

+1

* "phiên bản C++ chạy trên máy ảo CLI" * - Có CLR, đó là * môi trường thực thi ảo *. Đây là ** không ** máy ảo. Mã IL luôn được ** biên dịch thành mã máy gốc trước khi thực thi. * "Rõ ràng là tiêu chuẩn C++ không bao giờ chạy trên máy ảo" * - Không có gì rõ ràng về điều đó, và không có gì trong Đặc tả ngôn ngữ C++ yêu cầu C++ được yêu cầu biên dịch thành các chỉ dẫn máy gốc. C++ có thể được thực hiện rất tốt để chạy trong một máy ảo, và vẫn được gọi là * "Chuẩn C++" *. – IInspectable

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