关于括号,布尔逻辑和'\ n'

ses*_*358 0 c++ boolean-logic

我发现(true && false)给出0,而true && false(没有括号)给出1。这个问题可能是愚蠢的,因为我刚开始学习C ++,但是我在任何地方都找不到答案。

我执行以下操作:

cout << (true && false) << '\n';
cout << true && false << '\n';
cout << (true && false == true);
Run Code Online (Sandbox Code Playgroud)

它给了我:

    0
    10

看到这个之后,我变得更加困惑:

  1. (true && false)和之间true && false(没有括号)有什么区别?
  2. 因为true && false给了我1,所以我以为true && false没有括号就是true。但是,(true && false == true)给我0。为什么?是不是因为01不一定指示falsetrue
  3. 另外,'\n'第二行中的似乎不起作用。为什么?

abe*_*nky 5

运算符优先级表所示,<<优先级为7,&&优先级为14

结果,该表达式cout << true && false << '\n';可以重写为:

(cout << true) && (false << '\n');
Run Code Online (Sandbox Code Playgroud)

评估为:

(cout << true)         // Output: "1"; Evaluates to an ostream-object.
(false << '\n')        // No output; Evaluates to 0, the '\n' "disappears"
[ostream-object] && 0; // No output; Evaluates to 0
Run Code Online (Sandbox Code Playgroud)