2010-06-16 38 views

Trả lời

10

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".

+2

[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

+0

@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. –

+7

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

-3

Đồ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.

+3

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 "). –

4

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ù.

-9

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.

+0

'constexpr int factorial (int n) { return n == 0? 1: n * giai thừa (n-1); } 'là hoàn toàn hợp lệ. –

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