Приоритет оператора для «<<» и «++» в VS2008 с оптимизацией
Я застрял со странной проблемой VS2008 C ++, которая выглядит так, будто приоритет оператора не учитывается.
Мой вопрос, что является результатом этого:
int i = 0;
std::cout << ((i != 0) ? "Not zero " : "zero ") << ++i << std::endl;
Обычно++
имеет приоритет над<<
, право? Или это<<
рассматривается как вызов функции, что дает ему более высокий приоритет, чем++
? Каков на 100% правильный стандартный ответ на этот вопрос?
Чтобы проверить, я создал новый пустой проект (консольное приложение VS2008), вставил только этот код в основную и вот результаты:
Debug|Win32: “zero 1”
Release|Win32: “zero 1”
Debug|x64: “zero 1”
Release|x64: “Not zero 1”
Кстати, следующий пример дает точно такие же результаты:
i = 0;
printf("%s %d\n", ((i != 0) ? "Not zero" : "zero"), ++i);
Кроме того, изменение типа оптимизации в выпуске не имеет никакого эффекта, но отключение оптимизации выводит «ноль 1», как и другие конфигурации.