Ваш код переводится:
((std::cout << (abs(b - c) < a)) && a < b + c) ? 1 : 0;
Во-первых, operator<<
имеет более высокую, чем operator precedenceoperator&&
.
только значение abs(b - c) < a
будет распечатано и (a < b + c ? 1 : 0)
части будет и объединено с возвращаемым значением std::ostream::operator bool
.
Но предупреждение о 1
и 0
не присвоен ни к чему и не имея каких-либо побочных эффектов, потому что &&
предшествует трехкомпонентную условную (?:
).
Правильный код является:
std::cout << (abs(b - c) < a && a < b + c ? 1 : 0);
// same as std::cout << ((abs(b - c) < a && a < b + c) ? 1 : 0);
или
std::cout << (abs(b - c) < a && (a < b + c ? 1 : 0));
В самом деле, они эквивалентны (кроме, что один называет operator<<
с bool
, а другой с int
), не требуется тройной оператор:
std::cout << (abs(b - c) < a && a < b + c);
Я имел в виду 'std :: cout << ((abs (b-c) Wobbly