Gần đây tôi đã khám phá trong C11 và nhiều tính năng mới giúp tôi mã hóa C dễ dàng hơn. Tôi tự hỏi TẤT CẢ những tính năng này được chính thức hỗ trợ bởi C++ 11. Mối quan tâm của tôi không phải là về vấn đề triển khai hay biên dịch mà là tiêu chuẩn C++ mới.C++ 11 có hỗ trợ các tính năng mới của C11 không?
Trả lời
Không, C++ 11 không hỗ trợ TẤT CẢ các tính năng của C11. Nó thậm chí không hỗ trợ tất cả các tính năng của C99. Ví dụ, các mảng biến đổi độ dài được giới thiệu trong C99, nhưng C++ chưa hỗ trợ chúng. Xem this question để biết chi tiết.
Các mảng có độ dài thay đổi được dự kiến cho C++ 14 (chỉ để cung cấp khung thời gian cho câu lệnh của bạn). – zneak
@zneak: Không, "các mảng thời gian chạy bị ràng buộc" được xem xét cho C++ không giống với VLA của C. –
@BenVoigt, [N3820] (http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3820.html#dcl.array) bao gồm ví dụ về biểu mẫu 'int foo [ n] 'với một hằng số' n'. Tôi nên nhận biết sự khác biệt nào? Tôi thấy rằng nó không còn dự kiến cho C++ 14, mặc dù. – zneak
Tiêu chuẩn C++ 11 tham chiếu tiêu chuẩn C99, đặc biệt đối với thư viện chuẩn C.
C++ 11 hỗ trợ một số, nhưng không phải tất cả, trong số các tính năng có trong C99 nhưng không có trong C90. (Một số tính năng cụ thể của C99 hoặc được hỗ trợ khác nhau trong C++ hoặc không được cho là phù hợp.)
C11 đã thêm một số tính năng ở trên cùng của C99; hầu hết các tính năng mới này là không phải cũng được thêm vào C++.
Một ngoại lệ đáng chú ý cho điều này là hỗ trợ luồng (<threads.h>
trong C11, <thread>
trong C++ 11). Tôi đã không xem xét điều này đủ chặt để biết chúng giống nhau như thế nào.
(C11 cũng thực hiện một số các tính năng mới của nó, cũng như một số tính năng C99, tùy chọn;. Mà cũng không được phản ánh trong C++)
Sự hiểu biết của tôi là C11 đã thêm hỗ trợ luồng, cả dưới dạng hỗ trợ ngôn ngữ và các thành phần sử dụng để xử lý các chủ đề và đồng bộ hóa nguyên thủy. Tôi nghĩ rằng tất cả các tính năng này là C++ mặc dù các thông số kỹ thuật không nhất thiết phải giống nhau giữa C và C++. –
Có một loạt các thứ nhỏ khác nữa, như cấu trúc ẩn danh, không có hàm trả về, một số biểu thức kiểu chung và kiểu tương tự. Và, quan trọng nhất của tất cả, nó cuối cùng đã thoát khỏi 'gets()'. –
C11 thêm C + + 11 chủ đề hỗ trợ (và nguyên tử) nhiều hơn so với đối diện;) –
Trong số những bổ sung lớn, hai được chia sẻ giữa C11 và C + +11: chủ đề và nguyên tử. Tôi cũng nghĩ rằng mô hình trình tự bộ nhớ mới được chia sẻ giữa hai, nhưng tôi không biết C++ 11 đủ tốt để khẳng định điều đó một cách chắc chắn.
Một bổ sung chính cho C11 có thể sẽ không bao giờ được chia sẻ bởi C++: nhập biểu thức chung với _Generic
. Đối với nhiều trường hợp sử dụng của điều đó, trong quá tải hàm cụ thể, đã có các cấu trúc C++ thực hiện điều đó. Các trường hợp sử dụng phức tạp hơn khác như phát hiện các biểu thức hằng số hằng số biên dịch không được bao hàm bởi C++. C++ 1 có constexpr
, nhưng khác với tên có thể gợi ý đây không phải là công cụ để xác định xem biểu thức có phải là biểu thức không đổi hay không, nhưng để xác định rằng đối tượng hoặc hàm trả về là hằng số. Tạo mã hoàn toàn khác nhau cho hai trường hợp (không đổi và không liên tục) dường như không thể.
Không chỉ có _Generic
là không cần thiết cho các trường hợp sử dụng chính trong C++, nó cũng dựa nhiều vào lập trình macro trong giai đoạn tiền xử lý. Kể từ khi macro được tán thành bởi các phần lớn của cộng đồng C++ thêm rằng chắc chắn sẽ không tìm thấy sự đồng thuận.
downvoted. C++ 11 có thể phát hiện các biểu thức hằng số biên dịch với 'constexpr'. – TemplateRex
@TemplateRex, tôi sẽ xem xét điều đó, trong cách so sánh với tính năng C. Downvoting cho một điều như vậy mà không cho tôi thời gian để sửa chữa, có vẻ hơi cực đoan. Bạn có cơ hội nào theo đuổi tôi xuống ngày cuối cùng và bỏ phiếu về một số câu trả lời cũ mà tôi đã đưa ra từ nhiều năm trước không? –
không, tôi cố gắng luôn để lại nhận xét và tôi thường kiểm tra lại nếu có cập nhật về câu trả lời, để tôi có thể rút lại bất kỳ phiếu giảm giá nào. Về các downvotes khác, tôi nghĩ rằng bạn có một vài người trong C++ chat Lounge khó chịu đêm qua với chỉnh sửa thẻ của bạn trong [câu hỏi này] (http://stackoverflow.com/q/19120326/819272), nơi hai câu trả lời được bình chọn hàng đầu (bao gồm cả một trong số tôi) cũng đã được giảm giá cùng một lúc (* không * bình luận). – TemplateRex
- 1. Tính năng C++ 11 nào hỗ trợ Visual Studio 2010?
- 2. Tại sao C++ 11 không hỗ trợ cấu trúc ẩn danh, trong khi C11 làm gì?
- 3. Trình biên dịch hỗ trợ C11
- 4. Trình biên dịch C++ hỗ trợ tất cả các tính năng đồng thời C++ 11?
- 5. C11/C++ 11 Memory Model
- 6. Tính năng C++ 11 mới nhất với Android NDK
- 7. Làm thế nào các trình biên dịch C++ có thể hỗ trợ C++ 11 nguyên tử, nhưng không hỗ trợ mô hình bộ nhớ C++ 11
- 8. Trình duyệt webview có hỗ trợ tính năng html5 không?
- 9. VS2010 hoặc .NET 4.0 có hỗ trợ công cụ mới cho Trợ năng không?
- 10. Gcc 4.8.1 có hỗ trợ C++ 11 để thu gom rác không?
- 11. Kích hoạt hỗ trợ C++ 11 trong Clang
- 12. Chức năng của iPhone SDK Objective C có hỗ trợ các chức năng bên trong các chức năng không?
- 13. Tính năng "Khởi tạo thành viên trong lớp" có được tạo thành C++ 11 không?
- 14. Visual C++ 2010 có hỗ trợ thư viện chủ đề C++ 11 không?
- 15. boost.python không hỗ trợ tính song song?
- 16. C có hỗ trợ quá tải không?
- 17. Trình biên dịch C++ hỗ trợ các tính năng C++ 0x?
- 18. C++ 11 tính năng kiểm tra
- 19. Tính năng hỗ trợ có điều kiện của các tính năng iOS 6 trong ứng dụng iOS 5
- 20. Tệp không hỗ trợ tính năng ARC, cách xử lý
- 21. Cách sử dụng tính năng C++ 11 với Autoconf?
- 22. C có hỗ trợ các biểu thức hàm không?
- 23. Xác định xem máy tính của tôi có hỗ trợ tính năng ảo hóa HW
- 24. Có API cho Tính năng cảm ứng hỗ trợ của iOS không?
- 25. Làm cách nào để sử dụng các tính năng C++ 11 trong Clang?
- 26. Dart có hỗ trợ lập trình chức năng không?
- 27. Hỗ trợ Xcode của các hàm lambda
- 28. Các biến lớp hỗ trợ Objective-C có hỗ trợ không?
- 29. C++ 11 thread_local hỗ trợ từ khóa trong studio trực quan 11
- 30. Hỗ trợ API HTML5 Canvas mới
Một số, nhưng chúng là hai ngôn ngữ riêng biệt. – chris
Tính năng nào, cụ thể? Một số tính năng C mới cũng có tính năng trong C++ (nhưng không đảm bảo, vì @chris nói chúng là ngôn ngữ độc lập.) –
Tôi quen thuộc với C++ 11 nhưng không phải với C11: nó sẽ giúp bạn biết những gì bạn đang tìm kiếm cho. Ngoài ra, có một số lĩnh vực mà hai ngôn ngữ theo đuổi các cách tiếp cận và tính năng khác nhau sẽ không ánh xạ từ C đến C++. –