是吗?:表达式并不总是被评估?

xml*_*lmx 0 c c++ evaluation expression ternary-operator

在Lisp中,可以评估任何表达式.C++采用的概念是:"表达式","价值","评估".

如果您不知道"表达式","值"和"评估"之间的关系,请参阅C++标准5.1.

我知道?:表达式与+表达式相同.

必须能够评估任何表达式并给出值.然而,?:表达似乎并非总是如此.

void f1() {}
void f2() {}

void test(bool b)
{
    b ? f1() : f2(); // OK. What's the value of this expression?
}
Run Code Online (Sandbox Code Playgroud)

任何表达式都应该有一个值; b ? f1() : f2();是一种表达; 它的价值是什么?

任何解释?

更新和我自己的答案:

摘自C++标准5.1:

表达式可能会导致值,并可能导致副作用.

Naw*_*waz 5

表达式的值b ? f1() : f2()f1()f2()取决于的值b.在您的情况下,两个函数都返回void,因此表达式的值无效.