问题:
while
循环的括号应该包含一个表达式,所以我尝试将初始化放入其中,并且编译器提示我一个错误,这表明初始化不是表达式。
为了进一步证明这一点,我尝试了for
循环,我这样做for(int num = 3 ; num2 = 4 ; num3 = 5)
。令人惊讶的是编译器再次给我错误。
所以如果初始化不是表达式,它是什么样的语句?
感谢您花时间阅读我的问题
答案 0 :(得分:2)
在C和C ++中,赋值是一个表达式。例如。 a = 5
是赋值表达式。
在C和C ++中,您可以使用任何表达式,后跟分号,其中需要语句 - 例如函数体。这种类型的语句是表达式语句。 (从技术上讲,你可以完全忽略表达式。;
是一个简并的表达式语句。)
您只能使用需要声明的声明,而不能使用表达式的任何地方。
以下不是表达式或表达式语句,它是声明。 (从技术上讲,在C ++中,它可以在需要语句时使用声明语句,在C中它只是一个声明。)注意没有< em> assignment-expression 此声明的子部分,= 3
是声明的实体num
的初始值设定项。
int num = 3;
=
(初始化和赋值)的这两种常见用法有时会混淆。其中=
用于初始化声明中声明的实体,它是初始化,用于更改已声明的实体的值,它是赋值。
这里是C和C ++的不同之处:在C中,紧跟在while
关键字后面的带括号的实体必须是表达式,因此while (int num = 0) { /* ... */ }
之类的内容无效。< / p>
在C ++中,实体可以是条件,它允许使用初始化器和简单的表达式进行简单声明,如在C中。在C ++中, 条件采用声明的形式,声明的实体在每次迭代时初始化,并隐式转换为bool
以确定是否执行循环体。
for
循环在两种语言中都很特殊。在这两种语言中,for
关键字后面的括号列表的第一部分可以有效地是声明或表达式声明。
答案 1 :(得分:0)
for
循环在C和C ++中使用三个表达式。第一个是在循环运行之前执行的。第二个值用于确定循环何时结束。第三个表达式在for
循环的每次迭代结束时执行。
您可以滥用for
循环的意图,并在这三个部分中放置您想要的任何表达。
while循环while(<expression>) {<body>}
等同于for循环for(;<expression>;) {<body>}
。