2008-10-07 31 views
13

Trình biên dịch C++ CLI có thể biên dịch một số lượng lớn các lớp C++ mà không sửa đổi không?Có phải C + + CLI là phần phụ của C++ không?

Có phải C++ CLI là bộ siêu của C++ không?

+2

Tôi đã nhầm lẫn với câu hỏi này lúc đầu, sau đó tôi phát hiện ra rằng "CLI" ở đây là viết tắt của Common Language Interface (một phần của .net) và không phải là Command Line Interface. Không gian tên va chạm! – Neall

+1

Xin lỗi - "Cơ sở hạ tầng ngôn ngữ chung" - http://en.wikipedia.org/wiki/Common_Language_Infrastructure – Neall

+0

Vâng, suy nghĩ đầu tiên của tôi là Giao diện dòng lệnh. Tôi nghĩ, Cool! Câu hỏi VMS! – Vagrant

Trả lời

4

về mặt kỹ thuật không, nhưng tùy thuộc vào cách mã C++ chuẩn, có thể bạn sẽ ổn. khi bạn truy cập vào các cửa sổ, bạn có thể gặp sự cố. Tôi đã biên dịch toàn bộ công cụ trò chơi mà chúng tôi sử dụng tại nơi làm việc trong C++/CLI một lần và nó hoạt động tốt. Một đồng nghiệp đã làm tương tự cho tất cả mozilla và không có may mắn như vậy.

10

Theo Wikipedia:

C++/CLI nên được coi như một ngôn ngữ của riêng mình (với một bộ mới của các từ khóa, ví dụ), thay vì C++ superset hướng Managed C++

+0

Mặc dù hầu hết các từ khóa mới đều theo ngữ cảnh và có thể được sử dụng làm định danh trong mã khác. – Eclipse

+0

Có ba từ khóa vô điều kiện, 'gcnew',' generic' và 'nullptr'. Người cuối cùng bây giờ cũng là một từ khóa C++. Vì vậy, số tiền mà C + +/CLI không thể là một superset của C + + là thực sự khá nhỏ ... –

2

Tôi vẫn còn mới với đường cong học tập của mình trên C++/CLI - nhưng tôi đã có cùng một câu hỏi, và những gì tôi đã xác định cho đến nay là C++/CLI là một ngôn ngữ của tiêu chuẩn C++.

Nếu bạn không sử dụng phần mở rộng CLI, mã C++ của bạn sẽ kết thúc dưới dạng mã không được quản lý riêng, và về cơ bản giống nhau, nhưng được biên dịch sang CLR IL, thay vì x86 gốc.

Khi bạn bắt đầu sử dụng phần mở rộng CLI (và bắt đầu rơi vào sử dụng đối tượng/xử lý/lớp được quản lý), bạn bắt đầu tương tác với nền tảng CLR cơ bản hơn. Tại thời điểm đó, về cơ bản nó trở thành một "ngôn ngữ" mới, và bạn sẽ phải tách rời suy nghĩ của mình giữa phía "không được quản lý" và bên "được quản lý".

1

Trang 3 của Marcus Heege của cuốn sách 'Expert C++/CLI.NET cho Visual C++ Lập trình viên' trạng thái:

C++/CLI là một tập hợp các phần mở rộng thực hiện để các ngôn ngữ C++ để được hưởng lợi từ các dịch vụ rằng việc triển khai các ưu đãi CLI .

Và hơn nữa xuống cùng một trang:

C++/CLI là một superset của ngôn ngữ C++.

Cuốn sách tuyệt vời của ông có sẵn miễn phí từ here.

+4

Hình như cuốn sách là sai. Xem http://stackoverflow.com/questions/4610671/examples-of-iso-c-code-that-is-not-valid-c-cli –

+1

Cơ quan trích dẫn Herb Sutter: "Về việc liệu bộ tiện ích này có một ngôn ngữ thay thế khác, một phương ngữ tương thích, và/hoặc một ràng buộc: Tôi nghĩ bạn có thể tìm được những người hợp lý xem nó theo bất kỳ cách nào. , tiêu chuẩn hoặc cách khác [...] "- Xem * [Lý do thiết kế cho C++/CLI] (http://www.gotw.ca/publications/) *, Phiên bản 1.1 - Ngày 24 tháng 2 năm 2006. – Lumi

2

C++/CLI không phải là phần mở rộng của C++. Nó đúng hơn là một tập con với các bổ sung. VÍ DỤ. C++/CLI không hỗ trợ đa kế thừa.

Angelo

+0

Không thừa kế nhiều ? Nơi mà bạn đã nhìn thấy điều này? – Gabe

+0

Trong tài liệu? Tất cả các ngôn ngữ CLI chỉ hỗ trợ kế thừa đơn. Tuy nhiên có lẽ bạn có thể làm MI với mã không được quản lý, không bao giờ kiểm tra điều đó. –

+0

Hm, tôi đọc trên wikipedia một chút. Tôi không bắt được C++/CLI "thay thế" Managed C++. Thật không may, bài viết Wikipedia không nêu rõ trong những trường hợp như vậy C++/CLI hỗ trợ MI. –

1

tôi đã có thể biên dịch toàn bộ thư viện Qt (mà là rất lớn) như C++/CLI với nhỏ sửa đổi (chủ yếu trong việc xây dựng môi trường, mà còn cố định một lỗi trong mã nguồn Qt)

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