首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++中布尔值转换的变量定义

C++中布尔值转换的变量定义
EN

Stack Overflow用户
提问于 2020-02-23 07:58:47
回答 3查看 49关注 0票数 0

我发现以下代码在C++98和更高版本中是有效的:

代码语言:javascript
复制
if (int x = 7) {              // int x; if (x = 7) makes sense
  std::cout << x << '\n';     // 7 is printed
}

问:控制变量定义转换为布尔表达式的规则是什么?

如果如下所示,则b/c有意义,If条件是一个赋值表达式,它将计算为整数:

代码语言:javascript
复制
int x;
if (x = 7) {
  std::cout << x << '\n';
}
EN

回答 3

Stack Overflow用户

发布于 2020-02-23 08:01:03

赋值表达式的结果是赋值目标,在本例中为x。因为bool(7)是真,所以条件是真。

这个特性的一个常用用法是这样的:

代码语言:javascript
复制
if (auto* x = get_some_pointer())
    // use x, which is known to be not null

声明变量的位置与其无关。按照您的示例,这将做同样的事情:

代码语言:javascript
复制
int x;
if (x = 7)
    // ...
票数 2
EN

Stack Overflow用户

发布于 2020-02-23 08:04:38

和C一样,C++布尔值被视为值为0或1的整数。当从其他值转换时,如果值为零,则将布尔值解析为false,所有其他数字都为真。

这允许对指针(也可以解释为数字)进行简单的空检查,其中值为0的指针是空指针。

票数 -1
EN

Stack Overflow用户

发布于 2020-02-23 08:10:08

任何赋值语句的结果都是赋值后左操作数的值。

值零(用于整数、浮点和非作用域枚举)以及空指针和空指针到成员的值变为假。所有其他的价值观都成为现实。

因此,在这里,int x的值为7,变为true。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60360218

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档