语句初始化的哪个类别?

时间:2011-10-29 07:18:56

标签: c++ c for-loop initialization while-loop

问题:

  1. 在编程中,赋值语句是一个表达式,但初始化怎么样?它是一个表达式??
  2. while循环的括号应该包含一个表达式,所以我尝试将初始化放入其中,并且编译器提示我一个错误,这表明初始化不是表达式。

  3. 为了进一步证明这一点,我尝试了for循环,我这样做for(int num = 3 ; num2 = 4 ; num3 = 5)。令人惊讶的是编译器再次给我错误。

  4. 所以如果初始化不是表达式,它是什么样的语句?

  5. 感谢您花时间阅读我的问题

2 个答案:

答案 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>}