Для языка, такого как C++, существование стандарта является обязательным. И хорошие компиляторы стараются изо всех сил (ну, по крайней мере, большинство хороших компиляторов). Многие компиляторы имеют языковые расширения, некоторые из которых разрешены стандартом, некоторые из которых не являются. Из последнего типа 2 примера: TypeOfНасколько важно соблюдение стандартов?
ССЗ
Составители Microsoft, позволяют чисто виртуальная функция объявления, чтобы иметь как чисто-спецификатор (= 0) и определение (которое запрещено стандартом - давайте не будем обсуждать, почему, это другая тема :)
(есть много других примеров)
Оба примера могут быть использованы в следующих sense: example1 - очень полезная функция, которая будет доступна в C++ 0x под другим именем. example2 также полезен, и Microsoft решила не соблюдать запрет, который не имеет смысла.
И я рад, что компиляторы предоставляют языковые расширения, которые помогают нам разработчикам в нашей рутине. Но вот вопрос: не должен ли быть вариант, который, когда он установлен, требует, чтобы компилятор был как можно более стандартным, независимо от того, согласны ли они со стандартом или нет. Например, визуальная студия имеет такой вариант, который называется отключением языковых расширений. Но эй, они все еще позволяют example2.
Я хочу, чтобы все правильно поняли мой вопрос. Это БОЛЬШАЯ вещь, которую MSVC допускает example2, и мне очень хотелось бы, чтобы эта функция была в стандарте. Он не нарушает совместимый код, он ничего не делает. Это просто не стандарт.
Вы хотите, чтобы этот файл отключился при отключении языковых расширений, равном true2? Обратите внимание, что слова microsoft, example2 и т. Д. Являются заполнителями :) Почему?
Снова, просто чтобы убедиться. Ключевым моментом является: если компилятор потрудится предоставить совместимую версию (опционально заданную в настройках) (в ее пределах, например, я не говорю об экспорте) для определенной функции, когда они предоставляют лучшую альтернативу, которая не является стандартной и является возможно, даже надмножество стандарта, не нарушая ничего.
пример2 разрешен в g ++ тоже, а не только MSVC. – DumbCoder
mingw не ... но все же, как вы можете видеть, это не вопрос) –
Я уверен, что стандарт позволяет определять чисто виртуальный. http://en.wikipedia.org/wiki/Virtual_function "Хотя чистые виртуальные методы, как правило, не имеют импментации в классе, который их объявляет, чистым виртуальным методам на C++ разрешено содержать импиментацию в своем объявляющем классе, обеспечивая возврат или поведение по умолчанию что производный класс может делегировать, если это необходимо »., но ваш вопрос по-прежнему интересен. –