C++ 变量定义在c++;?

C++ 变量定义在c++;?,c++,C++,如果我将变量定义用作if,while,for语句的的控制结构,它会做什么 考虑以下两段代码: 我不知道变量定义是“返回”一个bool类型以指示定义的成功,还是变量定义在用作控制结构的条件时返回变量本身。 我认为第二个片段可以很好地工作,因为status是 =运算符。该条件测试状态是否为真。 我的一个朋友说第二个片段出错,因为变量status未声明。语句都很好 在第一种情况下,get_num()返回一个分配给新声明的变量i的值。如果整数不为零,则计算为真;如果整数为零,则计算为假。所以,只要i不是

如果我将变量定义用作
if
while
for
语句的
的控制结构,它会做什么

考虑以下两段代码:

我不知道变量定义是“返回”一个
bool
类型以指示定义的成功,还是变量定义在用作控制结构的条件时返回变量本身。 我认为第二个片段可以很好地工作,因为
status
=
运算符。该条件测试
状态
是否为

我的一个朋友说第二个片段出错,因为变量
status
未声明。

语句都很好

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

在第二条语句中,find似乎返回一个分配给status的bool。只要status为true,循环就会运行


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

而循环需要一个
bool
表达式

while({BOOL}) {...}
在上述代码的情况下

while(bool status = find(word)) {...}
简化为

while(status) {...}
在每次循环执行开始时,状态初始化为
find(word)
的结果

状态
随后在循环中可用

§3.3.3区块范围

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

关于你的第二个问题:

不知道变量定义是否“返回”布尔类型以指示定义的成功,或者变量定义在用作控制结构的条件时返回变量本身

只要变量可转换为bool,就没有问题

给定

可以表示为

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

只要
Foo
可转换为bool,就可以在
中声明并使用它,而
是有条件的。

赋值运算符通常会返回对左侧的引用<代码>a=b
返回对a的引用。如果its可转换为
bool
,则可以在条件(非零
int
convert to true)中进行检查。与和@magurra相关-此处没有赋值运算符。那些符号是初始化,不是赋值。@Pete Becker,是的,这就是为什么它只是一个注释而不是答案。我不确定它如何与初始化一起工作。@BartekBanachewicz感谢您的标准建议。;-)谢谢你的回答。;-)
while(status) {...}
while(Foo x = Expression()) {...}
while(static_cast<bool>(x)) {...}