我发现以下代码在C++98和更高版本中是有效的:
if (int x = 7) { // int x; if (x = 7) makes sense
std::cout << x << '\n'; // 7 is printed
}问:控制变量定义转换为布尔表达式的规则是什么?
如果如下所示,则b/c有意义,If条件是一个赋值表达式,它将计算为整数:
int x;
if (x = 7) {
std::cout << x << '\n';
}发布于 2020-02-23 08:01:03
赋值表达式的结果是赋值目标,在本例中为x。因为bool(7)是真,所以条件是真。
这个特性的一个常用用法是这样的:
if (auto* x = get_some_pointer())
// use x, which is known to be not null声明变量的位置与其无关。按照您的示例,这将做同样的事情:
int x;
if (x = 7)
// ...发布于 2020-02-23 08:04:38
和C一样,C++布尔值被视为值为0或1的整数。当从其他值转换时,如果值为零,则将布尔值解析为false,所有其他数字都为真。
这允许对指针(也可以解释为数字)进行简单的空检查,其中值为0的指针是空指针。
发布于 2020-02-23 08:10:08
任何赋值语句的结果都是赋值后左操作数的值。
值零(用于整数、浮点和非作用域枚举)以及空指针和空指针到成员的值变为假。所有其他的价值观都成为现实。
因此,在这里,int x的值为7,变为true。
https://stackoverflow.com/questions/60360218
复制相似问题