サー、短絡評価にこれをさせてください:
return dummyCache::instance().getVal(Id).getWhitelabelType() == "ABCD" ||
dummyCache::instance().getVal(Id).getIsPlc() == 1;
最初が true の場合、2 番目は起動しません。instance().getVal(id)
さらに、返されたオブジェクトがgetWhitelabelType()
との呼び出しの間で変更されていない場合、リモートで合理的な最適化コンパイラが再起動しないことを保証しますgetisPlc()
。実際、もしそうなら、私はそれをほとんど保証しgetWhiteLabelType()
ますconst
。(そして、それは確かにそうあるべきであるように見えます)。
ビットワークについて。表情がかなりひきつっていました。それはうまくいきますが。私が間違って読んでいない限り(そして私を信じてください、私がそうであると私に教えてくれる人々のリストはすぐに私に知らせます)、ブール値の評価を実行し、結果の true/falsebool
をに昇格させ、 fromint
の現在の値を(これはゼロなので、特別なことは何もありません)、それを式 でビットごとに OR し、最終的な int を bool に降格して に格納します。これが少なくともコンパイラーの警告にフラグを立てないことに驚いています。res
bool
int
int
res
だったはずですがif (!res) res ||= expr
、それでも、この回答の上部にあるように短絡評価を使用してローカルをres
完全に切り取ることができるため、無意味です。res
かどうかを検討してくださいfalse
。その場合、同等の式は になりますres = false || expr
。しかし、それだけres = expr
です。!res
それが実行される状態では、代入を使用することもできます。
最後に、eval に 3 番目のフィールドを追加することに関しては、どのように追加するかによって完全に異なります。追加の論理 OR の場合は非常に簡単です。
(A || B || C) のような式の場合、次のことができます
return dummyCache::instance().getVal(Id).AField() == ATestValue ||
dummyCache::instance().getVal(Id).BField() == BTestValue ||
dummyCache::instance().getVal(Id).CField() == CTestValue;
より複雑な操作の場合は、括弧を適切に使用することが大いに役立ちます。たとえば、次のように返し(A || B) && C
ます。
return (dummyCache::instance().getVal(Id).AField() == ATestValue ||
dummyCache::instance().getVal(Id).BField() == BTestValue) &&
dummyCache::instance().getVal(Id).CField() == CTestValue;
またはおそらく(A && C) || (B && !C)
(これは少し船外に出ています...)
return (dummyCache::instance().getVal(Id).CField() == CTestValue)
? (dummyCache::instance().getVal(Id).AField() == ATestValue)
: (dummyCache::instance().getVal(Id).BField() == BTestValue);