计算表达式

Ale*_*anu 0 c++ expression

我有:

#include <iostream>
int main()
{
    static int i, arr[10];
    cout<<(i==0) && (arr[i]<0);
} 
Run Code Online (Sandbox Code Playgroud)

这意味着两个i和所有元素都会t自动初始化0.为什么这个表达式(i==0) && (t[i]<0)返回true?即使这样也会返回:

#include <iostream>
int main()
{
    static int i;
    cout<<(i==0) && (i==1);
}
Run Code Online (Sandbox Code Playgroud)

当我重新提出这个问题时,我感到很困惑,这个问题应该是正确答案a:

  1. 鉴于声明:

static int i,t [10];

并假设i和t都没有显式初始化,表达式的值 (i==0) && (t[i]<0)

(a)是1

(b)是0

(c)取决于具体情况

Dar*_*con 8

您的问题是运营商优先级.该&&运营商在评估之后<<.因此,您的打印表达式变为:(cout<<(i==0)) && (i==1);.更正优先级,它按预期打印0:cout<<((i==0) && (i==1));

  • 如有疑问:更多括号! (2认同)