2010-12-30 42 views
6

Sự khác nhau giữa g ++ 4.0.0.8 và g ++ 4.3.2 là gì? Hai trình biên dịch C++ phổ biến nhất mà tôi đã thấy được sử dụng trong các cuộc thi lập trình khác nhau.Sự khác nhau giữa g ++ phiên bản 4.0.0.8 và 4.3.2 là gì?

Tôi đã cố gắng google nhưng không tìm thấy gì.

+5

Thanh toán chi tiết -> http://gcc.gnu.org/releases.html – DumbCoder

+1

@DumbCoder thats a list.I chỉ muốn biết nếu có bất kỳ sự khác biệt lớn nào b/w hai. các cuộc thi lập trình trực tuyến như SPOJ có hai phiên bản C++, nếu không có sự khác biệt nào thì SPOJ sẽ chỉ có phiên bản thứ hai (tức là phiên bản mới nhất, như SPOJ dành cho các trình biên dịch ngôn ngữ lập trình khác) –

Trả lời

13

Nó thực sự không phải là 'danh sách lớn', xem xét bạn quan tâm đến thay đổi C++ giữa hai.

4.0.0.8 chỉ là một phiên bản vá lỗi của 4.0, có ghi chú phát hành đang ở đây: http://gcc.gnu.org/gcc-4.0/changes.html

4.3.2 là một phiên bản vá lỗi của 4.3, có ghi chú phát hành đang ở đây: http://gcc.gnu.org/gcc-4.3/changes.html

Nếu bạn nhìn tại sự khác biệt giữa chúng, tôi nghĩ rằng danh sách sau đây bao gồm những khác biệt quan trọng nhất giữa GCC 4.0 và 4.3 mà bạn thực sự quan tâm.

GCC 4.3.2 có (bao gồm cả những thay đổi từ GCC 4.1GCC 4.2):

Experimental support for the ISO C++0x standard (đó là một liên kết)

  • long long hiện đang hỗ trợ chính thức trong C++ (mặc dù đó là một phần mở rộng được cung cấp trong GCC cũ hơn)
  • Mẫu extern được hỗ trợ
  • Dấu ngoặc nhọn bên phải như bạn thấy trong std::vector<std::vector<int>> hiện được hỗ trợ (lưu ý thiếu khoảng cách giữa hai số > ở cuối khai báo).
  • experimental support for Variadic Template Arguments
  • Static assertions
  • và một số người khác

More TR1 thư viện hỗ trợ

  • <regex> (gcc 4.3), <random> (gcc 4.2), và <complex> (gcc 4.2)

Xử lý mức hiển thị C++ đã được đại tu. (GCC 4.2)

Mức độ hiển thị hạn chế được truyền từ lớp này sang thành viên khác, từ chức năng đến thống kê cục bộ và từ mẫu và đối số mẫu sang instantiations, trừ khi hiển thị rõ ràng.

Thuộc tính mức độ hiển thị cho một lớp phải nằm giữa khóa lớp và tên chứ không phải sau dấu ngoặc đóng.

Thuộc tính hiện được phép cho enums và công cụ chỉ định kiểu được xây dựng chỉ khai báo một loại.

Thành viên của không gian tên ẩn danh hiện là cục bộ cho một đơn vị dịch cụ thể, cùng với bất kỳ khai báo nào sử dụng chúng, mặc dù chúng vẫn được coi là có liên kết bên ngoài cho ngữ nghĩa ngôn ngữ.

Một mẫu mở rộng không có giấy tờ đã được gỡ bỏ trong GCC 4.2 (đã được tán thành trong 4,1)

The (không có giấy tờ) mở rộng mà được phép mẫu với các đối số mặc định để bị ràng buộc với các thông số template mẫu với các thông số ít đã bị loại bỏ. Ví dụ:

template <template <typename> class C> 
void f(C<double>) {} 

template <typename T, typename U = int> 
struct S {}; 

template void f(S<double>); 

không còn được chấp nhận bởi G ++. Lý do mã này không được chấp nhận là S là một mẫu có hai tham số; do đó, nó không thể bị ràng buộc với C chỉ có một tham số.


Ngoài ra, kiểm tra porting to GCC 4.3 guide, nơi một số nội dung quan trọng, như:

Backward tiêu đề tương thích/phản đối đã được gỡ bỏ.

Chủ yếu là điều này có nghĩa một loạt các tiêu đề được tiêu chuẩn đã được loại bỏ, như <iostream.h> (sử dụng tiêu chuẩn <iostream>), <hash_map.h> (sử dụng <tr1/unordered_map>) <hashtable.h> (sử dụng <tr1/unordered_map> hoặc <tr1/unordered_set> tùy theo nhu cầu) vv Một lần nữa, không phải là một việc lớn. thực thi

chặt chẽ các tiêu chuẩn

Ví dụ, chữ ký vào mẫu hai đối số main 's phải chính xác.

Không có chức năng trùng lặp tên tham số

void func(int x, int x); // now an error 

Và đã có bản vá lỗi khác nhau, cũng như thay đổi mà tôi không nghĩ rằng thực sự ảnh hưởng đến cách bạn muốn viết mã cạnh tranh (như loại bỏ/bổ sung các cờ trình biên dịch mới) và loại bỏ các công cụ như các toán tử <?>? (đã từng sử dụng các trình biên dịch đó?).

Tất cả trong tất cả tôi không nghĩ rằng sự khác biệt giữa hai sẽ gây ra cho bạn nhiều đau buồn nếu bạn phải viết mã cho cả hai trình biên dịch.

0

Bạn đang phân vân về sự khác biệt giữa hai phiên bản khác nhau của g ++? Đó là hai phiên bản phổ biến của trình biên dịch GNU C++. Các bản phát hành Linux khác nhau có thể có phiên bản khác nhau của g ++ được gửi cùng với nó. Giống như CentOS 5.5 hiện tại của tôi có g ++ 4.1.2 với nó.

Để biết chi tiết về tính năng, hãy kiểm tra liên kết trong nhận xét của bạn.

0

Vì 4.3.2 mới hơn 4.0.0.8, nó tuân thủ tiêu chuẩn hơn. Để biết chi tiết, bạn phải kiểm tra tài liệu và phát hành các thay đổi

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