[英]Replace if-else with ?: in c++
原始代碼是:
if (expression1) statement1;
else statement2;
有沒有可能把它變成這個?
expression1 ? statement1 : statement2
還是取決於編譯器? 似乎這在 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;
}
如果我用throw 0
替換最后一個 0 ,它將成功編譯。
expression1? statement1: statement2
expression1? statement1: statement2
這實際上是不正確的。 正確的是這樣:
expression1? expression2: expression3
並非任何語句都可以等效地轉換為單個表達式,因此通常並非總是可能的。 例如:
if(expr)
{
for(int i = 0; i < 2; ++i) {std::cout << i; }
}
else
{
//something else
}
您不能將其轉換為?:
表達式,因為for
是語句,而不是表達式。
順便提一句。 它不能在標准 C 中完成。 您所指的可能是語句表達式,它是 GCC 擴展。
如果你可以轉換單曲
if (expression1) expression2;
以這種方式使用 (void(0)) 的技巧
expression1 ? expression2 : (void(0)) ;
但我不建議這樣做/使用它!
? :
? :
可能導致意大利面條代碼並盡量避免它。 最好有清晰易讀的代碼。
此外,兩種方式的代碼都是相同的,並且沒有特殊的理由來制作難以閱讀的代碼。
使源代碼不可讀正是我想要做的
為什么? 您唯一會影響到的人是您的代碼的維護者。 如果您試圖阻止黑客理解您的代碼,請不要打擾。 他們知道書中的每一個技巧,以及書中沒有的一些技巧。
編碼:
expression1 ? statement1 : statement2
在 C++ 中的工作方式與在 (GCC) C 中的工作方式相同。
編碼:
if (expression1) statement1;
已經是 go 一樣簡單的事情了。 為什么你甚至想改變這個?
除了Armen的回答,可能會提到C語法將語句定義為以下之一:labeled_statement、compound_statement、expression_statement、selection_statement、iteration_statement和jump_statement。 在所有這些中,只有表達式語句實際上是一個表達式。
與?:問題無關,但我認為用雙下划線定義您自己的標識符或在全局命名空間中以下划線開頭的標識符是不合法的 - 請參閱此問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.