Несколько составных операторов присваивания с круглыми скобками C ++ - PullRequest
1 голос
/ 12 апреля 2020

Я пытаюсь выучить C ++, кодируя простой класс, который принимает входные данные из двух двойных чисел, вещественную и мнимую части, и выполняет над ними операции. В частности, у меня есть один раздел:

cout << "((c1 += c2) += c3) = " << ((c1 += c2) += c3) << endl; 
cout << "c1 = " << c1 << endl; 

. В этом случае он правильно печатает, какова сумма с1, с2 и с3, но с1 обновляется только до суммы с1 и с2. Мне интересно, почему это так.

Ответы [ 2 ]

0 голосов
/ 12 апреля 2020

Прежде всего ((c1 += c2) += c3) в этом коде, прежде всего, будет выполнена внутренняя скобка, которая равна (c1+=c2, это даст сумму c1 и c2, после чего она будет добавлена ​​с помощью c3 (c1+c2)+=c3, добавит c3 к сумме. , Поскольку с3 добавляется к сумме с1 и с2, а не к переменной с3. Следовательно, c1 имеет только сумму c1 и c2. Если вы хотите, чтобы c1 также имел сумму c1, c2 и c3, попробуйте это ((c1=(c1 += c2)) += c3)

Надеюсь, вы получили ответ.

0 голосов
/ 12 апреля 2020

(c1 += c2) вернет c1 и добавит c2 к c1. Затем, поскольку возвращается c1, оператор меняется на c1 += c3. Итак, с3 добавляется к с1. По этим логам c, c1 должен быть равен сумме начальных значений c1, c2 и c3.

...