在c ++中用if:替换if-else

ilo*_*ahz 3 c++ syntax g++

原始代码是:

if (expression1) statement1;
    else statement2;
Run Code Online (Sandbox Code Playgroud)

有可能把它变成这个吗?

expression1 ? statement1 : statement2
Run Code Online (Sandbox Code Playgroud)

还是取决于编译器?似乎这在c ++标准中有所不同?

有时情况是这样的if (expression1) statement1;,我怎么能改变它?

顺便说一句,它可以在c中完成.

使源代码不可读正是我想要做的事情
这只是其中一个步骤

error: second operand to the conditional operator is of type 'void', but the third operand is neither a throw-expression nor of type 'void'
这是我在编译时用g ++(TDM-2 mingw32)4.4.1得到的

#include <stdio.h>

void _(int __, int ___, int ____, int _____)
{
    ((___ / __) <= _____) ? _(__,___+_____,____,_____) : !(___ % __) ?     _(__,___+_____,___ % __, _____) :
    ((___ % __)==(___ / __) && !____) ? (printf("%d\n",(___ / __)),
    _(__,___+_____,____,_____)) : ((___ % __) > _____ && (___ % __) < (___ / __)) ?
    _(__,___+_____,____,_____ + !((___ / __) % (___ % __))) : (___ < __ * __) ?
    _(__,___+_____,____,_____) : 0;
}

int main() {
    _(100,0,0,1);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

如果我用最后的0替换throw 0它,它将成功编译.

Arm*_*yan 8

expression1 ? statement1 : statement2这实际上是不正确的.这是正确的:

expression1 ? expression2 : expression3

不能将任何语句等效地转换为单个表达式,因此通常并不总是可行的.例如:

if(expr)
{
   for(int i = 0; i < 2; ++i) {std::cout << i; }
}
else
{ 
   //something else
}
Run Code Online (Sandbox Code Playgroud)

你不能将它转换成?:expression,因为for是一个语句,而不是一个表达式.

顺便说一句.它不能在标准C中完成.你所指的可能是声明表达式,它是GCC扩展