2014-09-12 58 views
-4

我有這樣的代碼如下:更換,如果else語句與網點代碼

if(a[i]==b[j]) 
    { 
    vect1.push_back(i); 
    vect2.push_back(j); 
    } 

我怎樣才能把上面的語句不使用的if else在C++中。

謝謝!

+4

請原諒我,但'else'在哪兒? – 101010 2014-09-12 18:38:58

+0

爲什麼?代碼是完全可讀的,如果您將其更改爲「更聰明」,則可讀性可能會受到影響。除非您的配置文件結果顯示導致性能下降的分支效果,否則性能不能成爲原因。 – Chad 2014-09-12 18:40:33

+1

'(void)((cond)&&(exp,exp,0));'現在好好混淆了。 (來源中沒有'如果',但那不會給你買東西)。 – Deduplicator 2014-09-12 18:44:02

回答

1

如果你真的不能使用if,可能是一些比賽,當然有一種方法。
儘管它看起來無分支,但編譯代碼中可能有一個分支。

我就當混淆,但無論如何,這裏有雲:

if(cond) { 
    expr1; 
    expr2; 
} 

可以寫爲:

(void)((cond) && (expr1,expr2,0)); 

在一些不起眼反正預處理不要使用它,可能旁邊如果沒有其他人會做,或者以後必須使用它的人(包括你)會感到強烈的不滿。

+1

這種無分支方式如何? – FDinoff 2014-09-12 19:11:12

+1

@FDinoff:它並不真正無分支。儘管如果表達式允許,它可能稍微有可能導致無分支的可執行代碼。 – Deduplicator 2014-09-12 19:15:39

+1

@Deduplicator爲什麼它會略微有可能導致無分支的可執行代碼?如果有的話,代碼混淆更有可能減少編譯器可能找到的優化機會。 – 2014-09-12 19:35:08