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不能默认构造和分配,则需要依赖于类型的东西.