Таким образом, приоритет оператора тройного оператора в C
кажется мне действительно странным. Показательный пример:Неожиданный результат, тернарный оператор в Gnu C
#include <stdio.h>
int main()
{
int i=5;
int j=6;
int k=7;
printf("A: %d\n", i+j+(k!=7)?1:11); //prints 1
printf("B: %d\n", i+j+((k!=7)?1:11)); //prints 22
return 0;
}
Это, кажется, похоже на вопрос здесь:
C++ ternary conditional and assignment operator precedence
Ternary operator evaluation order
В разъяснении, я понимаю, что круглые скобки, чтобы он работал, как и мои комментарии в моем оригинальном посте указана ...
Мне просто интересно, почему авторы языка выбрали метод оценки, который так сильно обманет людей, когда первое утверждение похоже на то, что оно может быть отформатировано компилятор должен быть действительным.
Но этот вопрос касается операторов с левой стороны или внутри членов класса, где это странное поведение происходит на RHS.
Мораль этой истории: используйте круглые скобки. –
Да, это было трудно, просто интересно, почему. :) Мне, если компилятор видит '?', Почему он не может взять все, что было до него, в '()' для более сложного оператора или в простейшем случае один оператор без круглых скобок ... Это казалось бы больше смысла ... –
Джейсон, все знают, что компьютеры созданы безумными учеными в лабораториях, поэтому, конечно, они не имеют смысла! –