Соответствие стандартов Visual C++ [закрывается]

Brandon: это - то, что я думал - специализированная функция никогда не должна вызываться. Который верен для второго приложения, я упомянул. Первое приложение, однако, ясно называет специализированную форму даже при том, что специализация не объявляется в заголовочном файле!

я главным образом ищу просвещение здесь:-), потому что первое приложение является модульным тестом, и неудачно иметь ошибку, которая не появляется в тесте, но в реальном приложении...

(PS: Я исправил эту определенную ошибку, действительно путем объявления специализации в заголовке; но что могли бы все еще быть скрыты другие подобные ошибки?)

14
задан Paul Stephenson 22 October 2009 в 08:57
поделиться

6 ответов

Может быть, страница нестандартного поведения MSDN для Visual C ++ просветит вас? Убедитесь, что вы смотрите на версию, которая вас больше всего интересует (поле с правой стороны).

Поскольку ссылки MSDN постоянно меняются (и неизвестно почему), вот основное содержание страницы, посвященной VS2008. , поэтому, когда ссылка прерывается и кто-то наталкивается на этот ответ, они могут Google и найти правильную страницу:

Нестандартное поведение

Следующие темы являются некоторыми из известные места, где Visual C ++ реализация C ++ не согласна со стандартом C ++. Секция номера относятся к номерам разделов в стандарт C ++.

14
ответ дан 1 December 2019 в 08:53
поделиться

I don't use VS 2008 yet, so I can only speak for VS 2005.

It doesn't support C99. Support for C89/90 has always been good in VC and I'm not aware of any non-compliance issues with it.

C++98 support has a number of issues, some of them are documented by MS as known issues and some are plain bugs. I made a blog entry to use as a "notebook" for various VS 2005 C++ bugs I encounter in practice. If you wish, you can take a look here, although this list is probably far from being complete

2
ответ дан 1 December 2019 в 08:53
поделиться

Моя любимая мозоль, которую большинство программистов считают неважной, но лично я считаю, сильно ухудшающей читабельность, заключается в том, что VC ++ не может скомпилировать следующий код C ++:

bool result = true and not false;

… потому что VC ++ не делает ' t распознают и , или и не (вместе с остальной частью ISO 646) как допустимые токены.

Пояснение : в стандарте упоминается обработка вышеуказанных токенов в §2.12, помечает их как зарезервированные в §2.11 и определяет отображение эквивалентности для них в §2.5 более традиционным представлениям операторов (например, и соответствует && ). Непонятно, почему они получают особый статус рядом с другими ключевыми словами. Еще более сбивает с толку то, что приложение C2.2 внезапно называет их «ключевыми словами». Все еще, в стандарте абсолютно ясны их обработка и семантика. VC просто не реализует эти параграфы (если вы не укажете флаг / Za во время компиляции).

5
ответ дан 1 December 2019 в 08:53
поделиться

Visual C ++ 2k3, 2k5 и 2k8, соответствуют C89 и C ++ 98.

Некоторые дополнительные функции взяты из C99, и есть несколько улучшений наверху C ++ 98.

2
ответ дан 1 December 2019 в 08:53
поделиться

Соответствие стандартам для C и C ++ было довольно низким для VS. Все начало меняться с 2005 года и становится лучше. VS2010 - это то, на что я действительно смотрю, с довольно большим количеством функций из C ++ 0x. Однако в большинстве случаев я заканчиваю поиск в Google по следующим ключевым словам:

  • msdn Соответствие ANSI C
  • msdn Соответствие ISO C ++

и т. Д. когда мне действительно нужно выяснить, почему что-то не работает так, как определено.

2
ответ дан 1 December 2019 в 08:53
поделиться

__ try помечен как расширение

2
ответ дан 1 December 2019 в 08:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: