C++ ANSI ИСО МЭК 14882 2003 Приложение С.1 (стр 668):именующее к RValue преобразования массива в ISO C
Изменение: Результат условного выражения, выражения присваивания, или запятой выражение может bean lvalue
Обоснование: C + + - это объектно-ориентированный язык, придающий относительно больший упор на lvalues. Например, функции могут возвращать lvalues.
Влияние на оригинальную функцию: переход к семантике четко определенной функции. Некоторые выражения C, которые неявно полагаются на преобразования lvalue-to-rvalue, будут давать разные результаты. Например,
char arr[100];
sizeof(0, arr)
дает 100 в C + + и sizeof(char*)
в С.
...
Я читал это только сегодня, и я вспомнил, что несколько месяцев идти мой друг предложила проблему, которая должна была написать функцию, которая вернет 0, если она была скомпилирована с C++ и 1, если она была скомпилирована с C. Я решил это, воспользовавшись тем, что в C структура была во внешней области. Поэтому, рассматривая эту новую информацию, я решил, что это будет еще одно решение вышеупомянутой проблемы, которую я пробовал в Microsoft Visual Studio 2008, но независимо от того, скомпилирован ли он как код C или C++ sizeof(0, arr)
всегда дает 4. Так что 2 вопроса:
1.Что такое ISO C? Это текущий стандарт C? Является единственным (я слышу, что C быстро развивается) 2. Является ли это ошибкой Microsoft C++?
ТИА
Edit: К сожалению смешались с выходом и редактировали:
С MSVC 2010 '' sizeof (0, arr) 'выглядит как' 4' (при компиляции как C++). С g ++ он оценивает значение '100'. –