2011-11-27 16 views
19

Tôi khá chắc chắn rằng tôi đọc trên một nguồn có thẩm quyền ở đâu đó (tôi tin rằng đó là trên các trang WG21) mà C++ 03 là không một điều chỉnh kỹ thuật của C++ 98 nhưng đó là một phiên bản mới của Tiêu chuẩn C++.Có phải C++ 03 là phiên bản mới của tiêu chuẩn C++ hay chỉ là một tiêu chuẩn kỹ thuật (TC) của C++ 98?

Nhưng không nontheless tôi chỉ thấy -std=c++98 chuyển đổi trong GCC và các trình biên dịch khác và Alf P Steinbach thực hiện một few comments gợi ý rằng nó thực sự có thể là TC của C++ 98.

Vì vậy, khi tôi viết về "C++ 03", có đủ đề cập đến C++ 98 không? Là câu hỏi có liên quan, thậm chí có phải là sai để sử dụng cụm từ "C++ 03" không? Bởi vì tôi nghĩ rằng nếu nó thực sự là C++ 98 TC1, thì có vẻ như với tôi nó không thể được gọi là C++ 03. Cũng giống như tôi chưa từng thấy ai đó viết C07 cho bản phát hành C99TC3.

+1

Tại sao điều này lại quan trọng trong thực tế? – Mat

+5

@ Tôi muốn viết văn bản chính xác. –

+2

ISO/IEC 14882: 2003 là ấn bản thứ hai của ISO/IEC 14882, phiên bản trước là 14882: 1998. Cả hai đều được công bố, ANSI được phê duyệt, tiêu chuẩn. Theo 2003 chuyển tiếp: "Ấn bản thứ hai này hủy bỏ và thay thế phiên bản đầu tiên ...". – Mat

Trả lời

7

Có và không.

C++ 03 (ISO C++ 14882: 2003) là một tiêu chuẩn theo đúng nghĩa của nó, và nó cũng "chỉ" TC1 vì nó chỉ được sửa đổi C++ 98 với một bộ chỉnh sửa.

Bạn có thể nói rằng C++ 03 là những gì C++ 98 được dự định là, từ ngữ thực tế của C++ 98 được sửa đổi để làm cho nó nói những gì nó đã có nghĩa là để nói.

Trong the committee's own words:

“ Ấn bản đầu tiên của tiêu chuẩn ISO/IEC 14882 được xuất bản vào năm 1998. Một Phần đính chính kỹ thuật đã được phê duyệt vào năm 2003,. và tiêu chuẩn được xuất bản lần nữa là ấn bản năm 2003. ”

Khoảng thời gian không liên quan trong đó chỉ được trích dẫn theo nghĩa đen.

Trong những lời của Wikipedia (mà không phải là một cơ quan, nhưng cần được cố định nếu nó ’ s sai):

“ Đối với một số năm sau khi phát hành chính thức của tiêu chuẩn, ủy ban xử lý các báo cáo khuyết tật , và công bố một phiên bản chỉnh sửa của chuẩn C++, ISO/IEC 14882: 2003, trong 2003. ”

người ta có thể tranh luận, tuy nhiên, giá trị khởi tạo là một điều mới và không chỉ là một cor rection. Và người ta có thể lập luận rằng Bản kỹ thuật chính nó chỉ bao gồm những sửa chữa, trong khi tiêu chuẩn được sửa đổi với những sửa chữa đó là một điều khác, một tiêu chuẩn mới. Cả hai điểm này đều có ý nghĩa theo ngữ cảnh, như tôi thấy nó, mặc dù không phải là các câu lệnh ngữ cảnh độc lập tuyệt đối.

+0

Vì vậy, ủy ban nói rằng * họ * phê duyệt nó như TC nhưng iso đã thực hiện một tiêu chuẩn mới không TC ra khỏi nó? –

+0

@Johannes: không, họ không nói "không phải là TC". C++ 03, theo lời của vỏ mặt sau của phiên bản cây chết, "tiêu chuẩn quốc tế C++ hoàn chỉnh, hiện tại kết hợp với Điều chỉnh kỹ thuật 1/Đây là kỹ thuật BS ISO/IEC 14882: 2003 (ấn bản thứ hai) được chấp thuận bởi tất cả các cơ quan tiêu chuẩn quốc gia (như ANSI). Đây là phiên bản ràng buộc duy nhất có sẵn của tiêu chuẩn. " Tôi không chắc chắn những gì BS trong có nghĩa là, mặc dù. –

+0

@ AlfP.Steinbach: Tiêu chuẩn Anh. BSi nơi cơ quan tiêu chuẩn duy nhất xuất bản ấn bản cây chết bị ràng buộc AFAIK. –

2

Đây là một tiêu chuẩn hoàn toàn mới. Tôi tin rằng nó đã bắt đầu chỉ là một TC, đó là lý do tại sao sự nhầm lẫn xảy ra, và nó chắc chắn là có hiệu quả chỉ là một bản phát hành bugfix. Tuy nhiên, có thay đổi và điều đáng biết là bạn đang nói về 98 hoặc 03.

+1

"Tuy nhiên, đã có những thay đổi và nó là giá trị biết liệu bạn đang nói về 98 hoặc 03.": chẳng hạn như? – akappa

+1

@akappa: 'std :: vector' chỉ yêu cầu các phần tử của nó được tiếp giáp bắt đầu từ 03 chẳng hạn. Tôi không đồng ý nó quan trọng nhiều mặc dù. Bất cứ ai quan tâm đến hành vi của C++ 98 sẽ ở trong một vị trí để biết họ nên xác định điều đó. Ai đó chỉ hỏi về "C++" có lẽ đang tìm kiếm một câu trả lời thực tế, và vì vậy muốn biết hành vi của tiêu chuẩn hiện tại, và trình biên dịch của họ sẽ hỗ trợ gì. Kể từ khi chúng tôi đang trên C++ 11, C++ 98 là không thích hợp cho các câu hỏi như vậy. – GManNickG

+1

@GManNickG câu hỏi được yêu cầu một cách rõ ràng về C++ 03 so với C++ 98, không chỉ là "C++". Sự khác biệt này không xa - phần mềm kế thừa yadda yadda. –