变量定义在 C++ 的控制结构中做什么

What does variable definition do in control structure in c++?

本文关键字:什么 控制结构 定义 C++ 变量      更新时间:2023-10-16

如果我使用变量定义作为ifwhilefor语句的控制结构,它有什么作用?

考虑C++入门(第 5 版)中的以下两个代码片段:

    while (int i = get_num())  //i is created and initialized on each iteration
    cout << i << endl;

    while(bool status = find(word)) {/*...*/}  //assume that find(word) returns a bool type

我不知道变量定义是"返回"bool类型来表示定义成功,还是变量定义在用作控制结构的条件时返回变量本身。我认为第二个片段工作正常,因为status=运算符。该条件测试status是否true。我的一个朋友说第二个片段是错误的,因为变量status是未声明的。

虽然循环需要一个bool表达式。

while({BOOL}) {...}

在上述代码的情况下

while(bool status = find(word)) {...}

简化为

while(status) {...}

状态初始化为循环每次执行开始时的find(word)结果。

然后,status在循环中可用。

§ 3.3.3 块范围

在 for-init 语句、for-range-声明中声明的名称,以及在 if、while、for、 和 switch 语句是 if、while、for 或 switch 语句的本地语句(包括受控的 声明),并且不得在该声明的后续条件中或最外层重新声明 受控语句的块(或者,对于 if 语句,任何最外层的块);

关于你的第二个问题:

不知道变量定义

是"返回"一个布尔类型来表示定义成功,还是变量定义在用作控制结构的条件时返回变量本身。

只要变量可转换为布尔值,就没有问题。

鉴于

while(Foo x = Expression()) {...}

可以表示为

while(static_cast<bool>(x)) {...}

只要Foo可转换为布尔值,就可以在while条件中声明和使用。

这两个语句都很好。

在第一种情况下,get_num() 返回一个分配给新声明的变量 i 的值。如果整数不为零,则计算为 true,如果整数为零,则计算为 false。因此,只要 i 不为零,此循环就会运行。

在第二个语句中,find 似乎返回一个分配给状态的布尔值。只要状态为 true,循环就会运行。

在括号内可以使用相应的变量,即您可以在第一个循环中使用 i,在第二个循环中使用 status,这确实是这样编写的优势。但是,它在第二个代码片段中并没有真正的意义,因为您已经知道状态为真......否则,循环将不再执行。如果您在此处更改状态,这也不起作用,因为每次循环运行都会有一个新的本地声明的状态变量。