Разница между бинарными литералами GCC и С++ 14?
С++ 14, похоже, идет, и компиляторы уже пытаются реализовать основные функции этой новой версии. Я смотрел на поддержку GCC для этих основных функций и заметил что-то о части бинарных литералов: GCC реализует их, но, похоже, имеет значение между Бинарные литералы GNU и бинарные литералы С++ 14. Вот соответствующие ссылки для обоих:
Я попытался найти некоторые различия между ними, поскольку GCC, похоже, имеет значение, но ничего не нашел. Кто-нибудь из вас знает больше о возможных несовместимостях?
Ответы
Ответ 1
Из commit diff, который ввел поддержку в gcc 4.9, единственное различие заключается в том, что gcc теперь принимает бинарные литералы как языковые особенности С++ 1y и doesn 't предупреждать, что они являются gcc-расширением, если указана поддержка С++ 1y. Нет изменений в фактической реализации.
Ранее:
warning : binary constants are a GCC extension
Теперь, если не указано -std=c++1y
:
warning : binary constants are a C..1y feature or GCC extension
Ответ 2
Я предполагаю, что разница заключается в том, что каждый из них является расширением, тогда люди не будут слишком склонны использовать его, а другие стандартно совместимы и доступны без включения расширений. Это формальность.
Ответ 3
Первым документом, на который вы указываете, является реализация GNU бинарных литералов как расширение языка C (т.е. это нестандартная функция C, и этот документ определяет, как gcc реализует расширение для языка).
Второй документ, на который вы указываете, - это предложение добавить бинарные литералы к языку С++ 11, но насколько я знаю, он не был принят ни (*), и это означает, что он не является частью стандартного С++, он остается как расширение языка, предоставляемое gcc.
Насколько я вижу, эта функция будет не переносимой для компиляторов, но вы можете определить собственную реализацию бинарного литерала на С++ 11, используя пользовательские литералы.
(*) s/не принимается/Я не могу найти ссылку на бинарные литералы в N3485 "Рабочий проект, стандарт для языка программирования С++", но это может быть функция, принятая для следующего стандарта С++.