【问题标题】:Which category of a statement initialization is?语句初始化属于哪一类?
【发布时间】:2011-10-29 07:18:55
【问题描述】:

问题:

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

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

  4. 那么如果一个初始化不是一个表达式,它是一个什么样的语句呢?

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

【问题讨论】:

  • 这取决于你使用的是 C++ 还是 C。你把两个标签都放在你的问题上!
  • 好点@JoelSpolsky。 C 语言的奇妙之处在于 K&R 的书如此之短,以至于您可以快速阅读并理解整个语言。 Stroustrup 比较长,但不难理解你是否有扎实的 K&R 基础。

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


【解决方案1】:

在 C 和 C++ 中,赋值都是一个表达式。例如。 a = 5 是一个赋值表达式

在 C 和 C++ 中,您可以在需要 语句 的地方使用任何后跟分号的表达式 - 例如函数的主体。这种类型的语句是一个表达式语句。 (从技术上讲,您可以完全省略表达式。; 是一个退化的表达式语句。)

您只能在需要声明的地方使用声明,而不是在可以使用表达式的任何地方。

以下不是表达式表达式语句,它是声明。 (从技术上讲,在 C++ 中,它可以在需要声明的地方使用时形成一个 declaration-statement,在 C 中它只是一个 声明。请注意,没有 assignment-expression 该声明的子部分,= 3 是声明实体 num 的初始化器。

int num = 3;

= 的这两种常见用法(初始化和赋值)有时会混淆。 = 用于初始化声明中声明的实体,它是初始化,它用于更改已声明实体的值,它是赋值。

这是 C 和 C++ 的不同之处:在 C 中,紧跟在 while 关键字后面的括号实体必须是 表达式,因此 while (int num = 0) { /* ... */ } 之类的内容无效。

在 C++ 中,实体可以是 条件,它允许使用初始化器和简单的 表达式 进行简单声明,就像在 C 中一样。在 C++ 中,其中条件是声明的形式,每次迭代都会对声明的实体进行初始化并隐式转换为bool来判断是否执行循环体。

for 循环在两种语言中都很特殊。在这两种语言中,for 关键字后面的括号列表的第一部分实际上可以是 声明表达式语句

【讨论】:

    【解决方案2】:

    for 循环采用 C 和 C++ 中的三个表达式。第一个在循环运行之前执行。第二个的值用于确定循环何时结束。第三个表达式在for 循环的每次迭代结束时执行。

    可以滥用for 循环的意图,并在这三个部分中放置您想要的任何表达式。

    while 循环 while(<expression>) {<body>} 等效于 for 循环 for(;<expression>;) {<body>}

    【讨论】:

    • 但是for的中间语句必须可以转换为bool。
    • 现在我只混淆初始化是否是一个表达式,因为赋值语句是一个表达式
    猜你喜欢
    • 1970-01-01
    • 2012-06-27
    • 2010-12-22
    • 2015-08-19
    • 1970-01-01
    • 2014-07-26
    • 1970-01-01
    • 2017-09-29
    • 2021-11-26
    相关资源
    最近更新 更多