首页 > 解决方案 > 变量定义到 C++ 中的布尔值转换

问题描述

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

if (int x = 7) {              // int x; if (x = 7) makes sense
  std::cout << x << '\n';     // 7 is printed
}

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

如果它像下面这样,那么如果条件是一个赋值表达式,它将计算为一个整数,这将是有意义的 b/c :

int x;
if (x = 7) {
  std::cout << x << '\n';
}

标签: c++

解决方案


赋值表达式的结果是赋值目标,在本例中为x. 既然bool(7)为真,则条件为真。

此功能的一个常见用法是更有用的,如下所示:

if (auto* x = get_some_pointer())
    // use x, which is known to be not null

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

int x;
if (x = 7)
    // ...

推荐阅读