Tôi muốn chơi với constexpr
, trình biên dịch nào có hỗ trợ nó chưa?Có trình biên dịch nào hỗ trợ constexpr chưa?
Trả lời
Dự án Apache Stdcxx có a nice table detailing which C++0x features are supported by which compilers. Nó được cập nhật thường xuyên và bao gồm hầu hết các trình biên dịch C++ hiện đại.
Theo đó, chỉ GCC 4.5 hỗ trợ constexpr
(lưu ý rằng hỗ trợ đó có thể là thử nghiệm).
Giữa danh sách đó và những gì đã được nói trong các nhận xét, có vẻ câu trả lời là "không".
Đồng ý, g ++ 4.5 và 4.6 hỗ trợ từ khóa, nhưng bỏ qua các tác động. Tôi chỉ biên soạn một chương trình thừa đơn giản (trên cả hai phiên bản sử dụng -std = C++ 0x) với dòng:
constexpr fact(int i) { return (i>1) ? fact(i-1)*i : 1; }
và nó được biên dịch và chạy nhưng khi kiểm tra các nguồn asm (-S tùy chọn) nó cho thấy sự Hàm được gọi với tham số thay vì được trình biên dịch xác định.
Câu trả lời là vô dụng mà không hiển thị chương trình thử nghiệm của bạn. Mô tả của bạn giống như bạn hiểu sai 'constexpr' (và định nghĩa hàm bạn hiển thị không phải là C++ hợp lệ. C++ không có" int ngầm "). –
Tính đến tháng 7 năm 2011, gcc 4.7 hỗ trợ constexpr. Bạn cần phải xây dựng nó từ svn mặc dù.
Cách sử dụng "constexpr" thực sự dễ dàng. Nhìn vào đoạn mã này:
constexpr int get_five(){
return 5;}
Hàm này trả về luôn luôn 5, vì vậy nó có thể được khai báo bằng từ khóa "constexpr". Nhưng hàm giai thừa trả về giá trị tùy thuộc vào đối số, do đó, "đầu ra" của nó không phải lúc nào cũng giống nhau.
'constexpr int factorial (int n) { return n == 0? 1: n * giai thừa (n-1); } 'là hoàn toàn hợp lệ. –
- 1. Trình biên dịch hỗ trợ C11
- 2. Hỗ trợ trình biên dịch cho sắp tới C++ 0x
- 3. Biên dịch ghc với hỗ trợ -fPIC
- 4. Làm cách nào để biết trình biên dịch có hỗ trợ ARC được bật không?
- 5. Các khối Objective-C có được hỗ trợ bởi các trình biên dịch trên Linux không?
- 6. Trình biên dịch nào có hỗ trợ nâng cao nhất cho tình trạng hiện tại của C++ 0x?
- 7. Làm cách nào để thêm hỗ trợ C++ 11 vào trình biên dịch Mã :: Blocks?
- 8. biên dịch vim với hỗ trợ python trên Ubuntu
- 9. Lỗi Opencv: không hỗ trợ GPU (thư viện được biên dịch không hỗ trợ CUDA)
- 10. Cần trình biên dịch phụ trợ
- 11. php với hỗ trợ readline được biên dịch cho windows
- 12. Trình biên dịch D chưa hoàn tất lập trình
- 13. 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
- 14. Trình biên dịch/trình biên dịch/trình biên dịch C++
- 15. RTA đa nhiệm Ada được hỗ trợ với các trình biên dịch mã nguồn mở
- 16. Trình biên dịch C++ hỗ trợ các tính năng C++ 0x?
- 17. Làm thế nào tôi có thể nhận được hỗ trợ trình biên dịch .less trong Visual Studio 2012 Release 2?
- 18. Trình biên dịch C++ hỗ trợ tất cả các tính năng đồng thời C++ 11?
- 19. Trình biên dịch không được hỗ trợ 'GCC 4.2' được chọn cho kiến trúc 'i386'
- 20. Trình biên dịch có trình biên dịch không?
- 21. Tại sao trình độ phạm vi dự phòng được trình biên dịch hỗ trợ và nó có hợp pháp không?
- 22. Chỉ thị tiền xử lý được hỗ trợ bởi trình biên dịch RIM
- 23. hỗ trợ trình biên dịch cho các bộ phân bổ stateful trong các thùng chứa STL
- 24. Chức năng trả về constexpr không biên dịch
- 25. Trạng thái của C99 hỗ trợ trong các trình biên dịch/công cụ chính là gì?
- 26. Hỗ trợ C99 có thực sự vẫn chưa phổ biến?
- 27. Trình biên dịch Scala có reentrant không?
- 28. constexpr tĩnh trỏ-to-chức năng, sự khác biệt giữa các trình biên dịch
- 29. Viết trình biên dịch; VM nào?
- 30. Có phải constexpr được hỗ trợ với các hàm/biểu thức lambda không?
[Bảng hỗ trợ GCC chính thức] (http://gcc.gnu.org/projects/cxx0x.html) tuyên bố rằng 'constexpr' không được hỗ trợ chút nào. Mã của tôi không biên dịch với 'constexpr', nhưng dường như nó không có tác dụng gì cả. Đoán đầu tiên của tôi là từ khóa chỉ bị bỏ qua? – fredoverflow
@Fred: Có lẽ không ai hỗ trợ nó sau đó. Tôi không sử dụng gcc thường xuyên, đủ để biết nhiều về hỗ trợ C++ 0x của nó, thật đáng buồn. –
Chỉ cần thử nghiệm trên g ++ (GCC) 4.6.0 20100605 - vẫn không thể tạo một mảng có kích thước được trả về bởi hàm constexpr. Đọc bugzilla, nó xuất hiện cú pháp GCC 4.5 được giới thiệu, nhưng không phải là ngữ nghĩa (chưa). – Cubbi