Вопрос по c++, operator-precedence – ... до следующей версии языка, где вы можете перегрузить сам приоритет.

21

понимаю, почему код ниже печатает1.

1 && 0 это не то же самое, чтоtrue && false ->false?

Почему это не печать0?

#include <iostream>

using namespace std;

int main(){
    cout << 1 && 0;
    return 0;
}
Уважатьприоритет оператора. nwp
Дополнительный вопрос: WTH звонитoperator && (std::ostream&, int) не ошибка типа? leftaroundabout
Расширьте свой эксперимент, например,cout << 2 && 3;, cout << 1 && 0 << 3;, cout << 1 && 0 << "hello";. molbdnilo
Это еще одна причина, почему перегрузка операторов сдвига битов для ввода / вывода была плохой идеей. el.pescado
Потоки @leftaroundabout неявно конвертируются вbool так что вы можете делать такие вещи, какwhile (cin >> number) { ... } joelw

Ваш Ответ

1   ответ
43

Приоритет оператора.

Перегруженный битовый оператор сдвига влевоoperator<<(std::basic_ostream) имеет более высокий приоритет, чем логический оператор&&.

#include <iostream>
int main() {
    std::cout << (1 && 0);
    return 0;
}

Если вы не уверены на 146% относительно приоритета оператора, не стесняйтесь использовать скобки. Большинство современных IDE сообщат вам, если вам не нужно их использовать.

... до следующей версии языка, где вы можете перегрузить сам приоритет. Mr Lister
@Drise, я должен отредактировать его в перегруженном побитовом левом операторе сдвига<< (operator<<(std::basic_ostream)? Я сомневаюсь, как это будет правильно на английском языке. Smit Ycyken
<< в этом случаене оператор левого смещения. Этооператор Ostream. Drise
Приоритет является частью грамматики, поэтому не имеет значения, какой тип реализации в конечном итоге будет использоваться. Достаточно сказать "<< имеет более высокий приоритет, чем&&». chepner
Да, это более педантично правильно. Drise

Похожие вопросы