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