[英]What does variable definition do in control structure in c++?
如果将变量定义用作if
, while
, for
语句的控制结构,该怎么做?
考虑一下C ++ Primer(第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
未声明。
While循环期望bool
表达式。
while({BOOL}) {...}
对于上面的代码
while(bool status = find(word)) {...}
简化到
while(status) {...}
每次循环执行开始时,状态都会初始化为find(word)
的结果。
status
然后在循环内可用。
第3.3.3节范围
在for-init-statement,for-range-declaration中以及在if,while,for和switch语句的条件下声明的名称对于if,while,for或switch语句(包括受控语句)是局部的,并且不得在该语句的后续条件中,也不得在受控语句的最外层块(或对于if语句,是任何最外层块)中重新声明;
关于第二个问题:
不知道变量定义是否“返回”布尔类型以指示定义是否成功,或者变量定义在用作控制结构的条件时会返回变量本身。
只要该变量可转换为bool,就没有问题。
特定
while(Foo x = Expression()) {...}
可以表示为
while(static_cast<bool>(x)) {...}
只要Foo
可转换为bool,就可以while
有条件的情况下声明和使用它。
这些陈述都很好。
在第一种情况下,get_num()返回分配给新声明的变量i的值。 如果int不为零,则将其评估为true;如果它们为零,则将其评估为false。 因此,只要我不为零,该循环就会运行。
在第二条语句中,find似乎返回分配给状态的布尔值。 只要状态为true,循环就会运行。
在while括号内,可以使用相应的变量,即,可以在第一个循环中使用i,在第二个循环中使用status,这的确是这样做的好处。 但是,由于您已经知道状态为true,所以在第二个代码段中并没有什么意义,否则循环将不再执行。 而且,如果您在此处更改状态,则也不起作用,因为每次循环运行都会有一个新的本地声明的状态变量。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.