2013-05-02 82 views
17

C++ 14似乎即將到來,編譯器已經試圖實現這個新版本的核心功能。我在看GCC support for these core features,並注意到了一些關於二進制文字部分:GCC實現它們,但似乎在GNU二進制文字和C++ 14二進制文字之間有所不同。以下是雙方各自的參考文獻:GCC二進制文字與C++ 14文字的區別?

我試圖找到他們兩個人之間的一些差異,因爲GCC似乎賺取差價,但找不到任何東西。你們有沒有更多地瞭解可能的不兼容性?

+0

第一個環節是GCC現有擴展到C和C++語言的GCC的文檔。第二個鏈接是將功能添加到標準C++的建議。 – 2013-05-02 09:10:47

+0

那麼,我知道這個和二進制文字是否被接受的狀態。我只是問他們之間可能的使用差異。 – Morwenn 2013-05-02 09:12:18

回答

20

從在gcc 4.9中引入支持的commit diff中,唯一的區別是gcc現在接受二進制文字作爲C++ 1y的語言特性,並且在C++中不會警告它們是gcc擴展1y支持被指定。實際執行沒有變化。

以前:

warning : binary constants are a GCC extension 

現在,除非-std=c++1y指定:

warning : binary constants are a C..1y feature or GCC extension 
+0

正是我尋找的答案,謝謝! ;) – Morwenn 2013-05-02 09:23:32

3

我在猜測,區別是因爲一個是擴展名,所以人們不會太傾向於使用它,而另一個是符合標準並且無需打開擴展即可訪問。這是一種形式。

0

您指向的第一個文檔是作爲C語言擴展的二進制文字的GNU實現(即,它是C的非標準功能,並且該文檔定義了gcc如何實現語言的擴展)。您指向的第二個文檔是向C++ 11語言添加二進制文字的建議,但據我所知它還沒有被接受(*),這意味着它不是標準C++的一部分它仍然是gcc提供的語言擴展。

據我所見,這個特性在編譯器中是不可移植的,但是你可以使用用戶定義的文字在C++ 11中定義你自己的二進制文字實現。 (*)s/not accepted /在N3485「Working Draft,Standard for Programming Language C++」中找不到對二進制文字的任何引用,但它可能是下一個C++標準接受的一個功能。

+1

我相信它在最近的布裏斯托爾會議上被接受。編輯更新草稿需要時間; n3485是從6個月前根據https://github.com/cplusplus/draft/tree/master/papers – bames53 2013-05-02 14:43:55