2013-05-02 11 views
17

Wydaje się, że nadchodzi C++ 14, a kompilatory już próbują implementować podstawowe funkcje tej nowej wersji. Patrzyłem na GCC support for these core features i zauważyłem coś o części literałów binarnych: GCC implementuje je, ale wydaje się, że robi różnicę między literałami binarnymi GNU a literaturami binarnymi C++ 14. Oto odpowiednie referencje dla obu:Różnica między literałami binarnymi GCC a C++ 14?

Próbowałam znaleźć jakieś różnice między nimi, ponieważ GCC zdaje się uczynić różnicę, ale nie mogłem znaleźć nic. Czy któryś z was wie więcej o możliwych niezgodnościach?

+0

Pierwszym ogniwem jest dokumentacja z GCC GCC istniejącego rozszerzenia do C i C++ językach. Drugie łącze to propozycja dodania funkcji do standardowego C++. –

+0

Cóż, wiem o tym i na temat tego, czy literały binarne zostały zaakceptowane czy nie. Po prostu pytam o możliwe różnice w użytkowaniu między nimi. – Morwenn

Odpowiedz

20

Od commit diff, która wprowadziła obsługę gcc 4.9, jedyną różnicą jest to, że gcc akceptuje teraz literały binarne jako funkcję językową C++ 1y i nie ostrzega, że ​​są rozszerzeniem gcc, jeśli C++ Podane jest wsparcie 1y. Nie ma zmian w faktycznej realizacji.

Poprzednio:

warning : binary constants are a GCC extension 

Teraz chyba -std=c++1y jest określona:

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

Dokładnie taki rodzaj odpowiedzi, którego szukałem, dzięki! ;) – Morwenn

3

Zgaduję, że różnica polega na tym, że jeden jest rozszerzeniem, a następnie ludzie nie byliby zbyt skłonni do używania go, podczas gdy drugi jest zgodny ze standardem i dostępny bez włączania rozszerzeń. To formalność.

0

Pierwszy dokument, który wskażesz, to implementacja GNU literałów binarnych jako rozszerzenie języka C (tzn. Jest to niestandardowa funkcja C, a ten dokument określa, w jaki sposób gcc implementuje rozszerzenie do języka).

Drugi dokument, o którym mówisz, to propozycja dodania literałów binarnych do języka C++ 11, ale z tego, co wiem, nie została ona zaakceptowana (*), co oznacza, że ​​nie jest częścią standardowego C++. , pozostaje jako rozszerzenie językowe zapewniane przez gcc.

O ile widzę, ta funkcja byłaby nieprzenośna w kompilatorach, ale można zdefiniować własną literalną implementację binarną w C++ 11 przy użyciu literałów zdefiniowanych przez użytkownika.

(*) s/nie zaakceptowano/Nie mogę znaleźć żadnego odniesienia do literałów binarnych w N3485 "Working Draft, Standard for Programming Language C++", ale może to być funkcja zaakceptowana dla następnego standardu C++.

+1

Sądzę, że został przyjęty na ostatnim spotkaniu w Bristolu. Edytor musi zaktualizować wersję roboczą; n3485 jest z 6 miesięcy temu według https://github.com/cplusplus/draft/tree/master/papers – bames53