每个if-else构造都可以用等效的条件表达式替换吗?

wha*_*cko 8 c c++ conditional-operator

(我不太需要这个答案,我只是好奇.)

是否可以使用条件运算符将每个if-else构造替换为等效的条件表达式?:

小智 11

是否每个if-else结构都可以使用条件运算符替换为等效的条件表达式?

不,你已经倒退了. if/else的"主体"包含语句,并且不可能将每个语句转换为表达式,例如try,while,break语句以及声明.然而,许多"陈述"实际上是伪装的表达方式:

++i;
blah = 42;
some_method(a,b,c);
Run Code Online (Sandbox Code Playgroud)

所有这些都是由一个表达式(分别为递增,赋值,函数调用)组成的语句,并且可以在条件语句中转换为表达式.

所以,让我们颠倒这个问题,因为听起来你真的想知道if/else语句对于三元条件表达式是多么等效:每个条件表达式都可以用等效的if/else语句替换吗? 几乎所有,是的.一个常见的例子是return语句:

return cond ? t : f;
// becomes:
if (cond) return t;
else return f;
Run Code Online (Sandbox Code Playgroud)

还有其他表达方式:

n = (cond ? t : f);
// becomes:
if (cond) n = t;
else n = f;
Run Code Online (Sandbox Code Playgroud)

这开始指向无法轻易替换条件表达式的位置:初始化.由于您只能初始化一次对象,因此必须将使用条件的初始化分解为使用显式临时变量:

T obj (cond ? t : f);
// becomes:
SomeType temp;
if (cond) temp = t;
else temp = f;
T obj (temp);
Run Code Online (Sandbox Code Playgroud)

请注意,这更加繁琐/繁琐,并且如果SomeType不能默认构造和分配,则需要依赖于类型的东西.