【发布时间】:2018-08-14 17:43:44
【问题描述】:
如果我在 if 条件中使用赋值运算符或输出函数,为什么会将其视为“真”布尔值?
例如,我这样做
if(cout << "a"){cout << "c";}
或者
if(int x=7){cout << "c";}
甚至
if(6){cout << "c";}
输出确实是,在每种情况下都是 c 和 c 和 c。但是我们被告知,在 if 条件中,我们必须使用一个最终计算为布尔值的表达式,例如 1 或 0。
那么我缺少的信息是什么?
【问题讨论】:
-
它不必是布尔值
true或false。它必须是 contextually convertible 才能布尔值。见en.cppreference.com/w/cpp/language/if。 -
int x=7不是分配。这是初始化。 -
@RichardCritten 考虑
if (auto opt = something_returning_optional()) { ... }。那是有效的,并且已经有效了很长时间 -
@NathanOliver 谢谢 - 还是有点奇怪
if(int x=7; int y=0){x=x;y=y}很好 -
@RichardCritten 啊,选择语句中 init-statement 的魔力 #C++17