我正在努力提高我的编程技巧。程序的输出如下 '我在其他地方,如果1 '。 我想知道背后的原因,为什么x值没有初始化为2而是显示为1.
#include <iostream>
using namespace std;
int main()
{
if (false)
{
cout << "I'm in if " << endl;
}
else if (int x=2 && true)
{
cout << "I'm in else if " << x << endl;
}
else
{
int y = x;
cout << y << endl;
}
return 0;
}
答案 0 :(得分:8)
根据运营商优先顺序,
if (int x=2 && true)
被解析为
if (int x = (2 && true))
所以x = true
所以1
。
答案 1 :(得分:4)
这归结为编写选择陈述时所涉及的语法,这正是if
的真实含义。
通过阅读标准的相关部分,我们发现以下内容:
6.4p1
选择语句[stmt.select]
选择语句选择几个控制流之一
selection-statement: if ( condition ) statement if ( condition ) statement else statement switch ( condition ) statement condition: expression [...] decl-specifier-seq declarator = initializer-clause [...] decl-specifier-seq declarator braced-init-list
当编译器看到if (int x=2 && true)
时,它会将2 && true
解析为声明(int x =
)引入的名称的初始化程序。
理论摘要
从语义上讲,您的代码段与以下内容相同 - 这无疑解释了为什么x
等于1
。
if (false) {
cout << "I'm in if " << endl;
} else {
int x = 2 && true;
if (x) {
cout << "I'm in else if " << x << endl;
}
}
将2 && true
转换为int
int x = (2 && true) =>
int x = (true && true) =>
int x = true =>
int x = 1
答案 2 :(得分:1)
if
语句中的条件可以是表达式或声明某些内容,它们不能组合(表达式不能声明任何内容)。 int x = 2 && true
声明x
并将其初始化为2 && true
true
(或转换为int
时为1)。
要做似乎有意的事情,x
需要在if
之外宣布:
int x;
if((x = 2) && true) { ... }
注意parens,逻辑AND的优先级高于赋值。
答案 3 :(得分:0)
这部分代码:
int x=2 && true
以下列方式工作:
注意,&amp;是按位和&amp;&amp;是布尔值和