Разница между двоичными литералами GCC и C ++ 14?

C ++ 14, похоже, грядет, и компиляторы уже пытаются реализовать основные функции этой новой версии. Я смотрел на Поддержка GCC для этих основных функций и заметил кое-что о части двоичных литералов: GCC реализует их, но, кажется, делает разницу между двоичными литералами GNU и двоичными литералами C ++ 14. Вот соответствующие ссылки для обоих:

Я попытался найти некоторые различия между ними, так как GCC, кажется, имеет значение, но ничего не смог найти. Кто-нибудь из вас знает больше о возможных несовместимостях?

18

Решение

От совершить разницу который ввел поддержку в gcc 4.9, единственное отличие состоит в том, что gcc теперь принимает двоичные литералы как языковую особенность C ++ 1y и не предупреждает, что они являются расширением gcc, если указана поддержка C ++ 1y. Там нет изменений в фактической реализации.

Ранее:

warning : binary constants are a GCC extension

Теперь, если -std=c++1y указано:

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

Другие решения

Я предполагаю, что разница в том, что одно является расширением, тогда люди не будут слишком склонны использовать его, в то время как другое соответствует стандарту и доступно без включения расширений. Это формальность.

3

Первый документ, на который вы указываете, — это реализация GNU двоичных литералов как расширения языка C (т. Е. Это нестандартная функция C, и этот документ определяет, как gcc реализует расширение для языка).

Второй документ, на который вы указываете, это предложение добавить двоичные литералы в язык C ++ 11, но, насколько я знаю, он также не был принят (*), и это означает, что он также не является частью стандартного C ++, он остается расширение языка, предоставляемое gcc.

Насколько я вижу, эта функция будет непереносимой между компиляторами, но вы можете определить свою собственную реализацию двоичного литерала в C ++ 11, используя пользовательские литералы.

(*) s / не принято / Я не могу найти никаких ссылок на двоичные литералы в N3485 «Рабочий проект, стандарт для языка программирования C ++», но это может быть функция, принятая для следующего стандарта C ++.

0
По вопросам рекламы [email protected]