Я в замешательстве по поводу прямого назначения и приоритета троичных условных операторов:
#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