变量定义在 C++ 的控制结构中做什么
What does variable definition do in control structure in c++?
如果我使用变量定义作为if
、while
、for
语句的控制结构,它有什么作用?
考虑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,这确实是这样编写的优势。但是,它在第二个代码片段中并没有真正的意义,因为您已经知道状态为真......否则,循环将不再执行。如果您在此处更改状态,这也不起作用,因为每次循环运行都会有一个新的本地声明的状态变量。
- 使用什么数据结构来存储基于游戏对象的二维单元地图?
- 哪种控制结构所需的时间复杂度更低?
- 该C 警告是什么 - 控制达到非空隙函数的末端
- 我们可以在不使用任何控制结构的情况下从函数中返回基于决策的值
- 我应该使用什么数据结构来对数据库/表进行建模
- 什么是结构开头的函数列表指针,称为 c++
- 如何维护城市道路数据?(我应该使用什么数据结构)
- 这是什么C++语言结构:#(即哈希)整数"path_to_header_or_cpp_file"<integer>?
- C++中的流控制结构,如何修改
- 帮助同时控制结构程序
- 使用 if-else 控制结构的意外输出
- 变量定义在 C++ 的控制结构中做什么
- 什么是结构的非成员
- 在控制结构块中定义变量
- 我的函数的控制结构不会阻止它无限期地继续下去。为什么?
- 您将使用什么数据结构来实现字典
- 在OSX中使用什么体系结构
- 什么数据结构可以用于在cpp中存储windows目录结构
- 是否存在基于范围的类案例控制结构?
- 使用c++的MySQL控制结构