Какие функции C ++ (98/03) не очень хорошо поддерживаются плохими компиляторами? - PullRequest
9 голосов
/ 28 декабря 2010

Часто я читал о программном обеспечении, исключающем некоторые функции C ++ для обеспечения совместимости с плохими / старыми / экзотическими компиляторами C ++.

Этот - только последний, в который я попал: Box2D не использует пространства имен, потому что они должны поддерживать:

плохие компиляторы C ++, где поддержка пространства имен может быть пятнистой

Примером, который я могу привести, является Qt,который полагается на MOC, сильно ограничивает использование шаблонов и избегает шаблонов (ну, по крайней мере, это верно для Qt3 и предыдущих версий, Qt4 в основном делает это, чтобы соблюдать их соглашения).


Мне интересно, какие компиляторы такие плохие?
Есть множество компиляторов C ++ (я никогда не слышал о большинстве из них), но я надеюсь, что все они поддерживают наиболее распространенные(/ просто?) C ++ функции, такие как пространства имен (если они не мертвы);разве это не так?

Какие функции не поддерживаются?
Я легко могу ожидать отсутствие внешних шаблонов, возможно частичную специализацию шаблонов и аналогичные функции.В большинстве случаев даже RTTI или исключения, но я бы никогда не заподозрил пространства имен.

Ответы [ 7 ]

8 голосов
/ 29 декабря 2010

По моему опыту, люди просто напуганы новыми вещами и особенно вещами, которые обрушились на них однажды, 20 десятилетий назад.Нет никаких веских причин против использования пространств имен во всем, что было написано в этом столетии.

Если вы ищете что-то, что нужно выбросить, если вы не так давно нацеливались на окна, вам нужно было сделать больше, чем простовыкидывать функции из C ++ и не использовать их, вам пришлось использовать другой синтаксис.Шаблоны приходят на ум как одна из худших поддерживаемых функций в VC.Они стали намного лучше, но все же иногда терпят неудачу.

Еще один, который не поддерживается этим конкретным компилятором (STILL!), Перегружает виртуальные функции для возврата указателей производных типов на типы, возвращаемые базовой версией при использовании MI,VC просто сходит с ума, и вам в итоге приходится делать virtual_xxx() и предоставлять не виртуальные функции "xxx ()" для репликации стандартного поведения.

4 голосов
/ 29 декабря 2010

Какие функции не поддерживаются?

Давайте отвлечемся export, что, к сожалению, был неудачным экспериментом. Затем, по подсчетам пользователей компилятора, это, вероятно, двухфазный поиск , который Visual C ++ до сих пор не реализует должным образом. И у VC много пользователей.

2 голосов
/ 29 декабря 2010

В основном все, что было добавлено как часть процесса стандартизации в C ++ 98.То есть:

  • Шаблоны (не только частичная специализация - я имею в виду все шаблоны)
  • Исключения (часто потому, что этот требует поддержки / издержек во время выполнения - они часто недоступнына такие вещи, как микроконтроллеры)
  • Пространства имен
  • RTTI

Если вы становитесь старше, вы можете добавить

  • Большинство всего встандартная библиотека.

Несколько старых компиляторов просто плохие;OTOH я бы настоятельно не рекомендовал беспокоиться о них.Уже есть несколько хороших и свободно доступных компиляторов, соответствующих стандартам, которые доступны практически для каждой платформы, о которой я знаю (в основном через G ++).

1 голос
/ 29 декабря 2010

Значение инициализации (функция C ++ 03) неправильно реализовано в MSVC ++ .

1 голос
/ 29 декабря 2010

Если вы программируете в основном потоке с помощью компилятора основного потока, то обычно вы найдете все в поддерживаемом стандарте C ++ 03 (кроме экспорта, как упомянуто sbi), но опять же никто не использовал эту функцию (так как она не поддерживалась))). Чем дальше от основного потока компилятор, тем меньше функций обычно (но все они движутся вперед (некоторые медленнее, чем другие))

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

Основным примером могут служить мобильные устройства и связанные с ними компиляторы (хотя из-за их популярности в основном потоке в последние годы эти компиляторы обновляются быстрее, чем раньше).

Вторичный пример - устройства SOC. Там компиляторы настолько специфичны, что они обычно находятся в домашних компиляторах и получают только столько работы над ними, сколько может себе позволить компания SOC, и в результате имеют тенденцию отставатьпуть (или, по крайней мере, дальше) позадивсе компиляторы.

1 голос
/ 29 декабря 2010

Пространства имен были около навсегда .Возможно, некоторые из более темных мест в шаблонах.Но пространства имен?Ни за что.Даже с шаблонами, подавляющее большинство сценариев использования в порядке.Некоторые компиляторы не идеальны (они программное обеспечение), но утончаются не поддерживает функцию C ++ 03, не экспортировать?Такого просто не бывает.Большинство компиляторов расширяют язык, а не уменьшают его, и переходят на поддержку C ++ 0x.

RTTI и исключений часто обвиняют в недостаточно эффективных реализациях,не плохое соответствие реализации.

0 голосов
/ 29 декабря 2010

Qt мало использует шаблоны, потому что он старше шаблонов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...