Như bạn đã tự tìm ra, sự khác biệt giữa hai tùy chọn là liệu các phần mở rộng GNU có vi phạm / mở rộng chuẩn C ++ có được bật hay không. Các phần mở rộng GNU C ++ được mô tả ở đây . Bạn cũng có thể sử dụng hầu hết các phần mở rộng GNU C (được mô tả ở đây ) trong các chương trình C ++ của bạn. Nó cũng sẽ hữu ích để đọc về -Wpedantic
tùy chọn GCC ở đây .
Lưu ý rằng một số tiện ích mở rộng vẫn có thể có hiệu lực khi sử dụng -std=c++11
, miễn là chúng không mâu thuẫn với tiêu chuẩn. Chẳng hạn, khi sử dụng trình biên dịch MinGW, tôi cần các phần mở rộng để làm việc Boost.Lexical_Cast
. Nhưng, miễn là bạn không sử dụng bất kỳ ứng dụng nào trong số đó, tốt hơn hết bạn nên tuân thủ tiêu chuẩn mà không cần tiện ích mở rộng để có tính di động tối đa. Điều này có thể có ích nếu bạn thấy mình bị buộc phải thay đổi trình biên dịch.
gnu
cái đó đề cập đến các phần mở rộng, và nếu bạn muốn viết mã di động, bạn nên tuân thủ một tiêu chuẩn và tránh các phần mở rộng hoàn toàn.