Приоритет тернарных условных операторов и операторов присваивания

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

32
задан Ari Brodsky 30 November 2017 в 09:43
поделиться