Я запутался в прямом назначении и тернарных условиях Приоритет onal операторов:
#include<stdio.h>
int main(void)
{
int j, k;
j = k = 0;
(1 ? j : k) = 1; // first
printf("%d %d\n", j, k);
j = k = 0;
1 ? j : k = 1; // second
printf("%d %d\n", j, k);
return 0;
}
Я ожидал, что на выходе будет:
1 0
1 0
Но так получилось:
1 0
0 0
Плюс я получаю это предупреждение:
main.cpp: 20: предупреждение: оператор не имеет эффекта
, который относится к строке, которую я прокомментировал как вторую.
Поскольку оператор прямого присваивания имеет меньший приоритет, чем тернарный условный оператор, я ожидал, что строки, прокомментированные как первая и вторая, будут эквивалентны. Но, увы, это не так.
Я пробовал это с g ++ --version (Ubuntu 4.4.3-4ubuntu5) 4.4.3