Почему отображаемое значение b, c и y отличается от моего следа? - PullRequest
0 голосов
/ 28 февраля 2020

скажите, пожалуйста, почему значение переменной "y" отображается как "5", хотя мы присваиваем ей значение 0. и, пожалуйста, дайте мне знать, что не так с моей трассировкой алгоритма c, которая привела меня к неправильным значениям b = 1 и c = 1; спасибо всем

enter image description here

cout << boolalpha; // Outputs boolean values
// as true or false
   bool res = false;
   int y = 5;
   res = 7 || (y = 0);
   cout << "Result of (7 || (y = 0)): " << res
       << endl;
   cout << "Value of y: " << y << endl;
   int  a, b, c;
   a = b = c = 0;
   res = ++a || ++b && ++c;
   cout << '\n'
       << "  res = " << res
       << ",   a = " << a
       << ",   b = " << b
       << ",   c = " << c << endl ;
   a = b = c = 0;
   res = ++a && ++b || ++c;
   cout << "  res = " << res
       << ",   a = " << a
       << ",   b = " << b
       << ",   c = " << c << endl ; 

1 Ответ

2 голосов
/ 28 февраля 2020

cppreference.com - Логические операторы :

Встроенные операторы && и || выполняют оценку короткого замыкания ( do не оценивать второй операнд, если результат известен после вычисления первого ), но перегруженные операторы ведут себя как обычные вызовы функций и всегда оценивают оба операнда

Так что для res = 7 || (y = 0), где || является встроенным оператором, результат 7 || (y = 0) известен после оценки 7, и поэтому (y = 0) не будет оцениваться.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...