2012-01-05 14 views
0

System :: Booleanで3項演算子を使用するには?このサンプルコードは、常にtrueを返します:System :: Boolean変数の3進演算子

bool Test(Boolean^ value) 
{ 
    return value ? true : false; 
} 
+4

ブール値型です。引数としてboxedコピーを渡すことはまったく意味がありません。もちろん、オブジェクトは決してnullptrではないので、あなたのコードは失敗しました。それをブールに戻すことは、正当な理由でCPUサイクルを焼くだけです。^ –

+0

を削除します。ブール値はC++/CLIで自動的にboolに変換されるため、3項演算子を使用する理由は何ですか? Hansが提案したように^をドロップすると、単に 'value'を返すことができます。 –

答えて

0

自分の未熟の質問に答える、このコードは動作します:

:このコードは、より良いの作品いっそ(ハンスとMattのアドバイスと次):

bool Test(Boolean^ value) 
{ 
    return (bool)value ? true : false; 
} 

EDIT

ブール値とブール値が変換可能であるため、これは他の場所で発生する自動変換に依存する良いコードです。例三項演算子を示す以外はほとんど意味があります。

bool Test(bool value) 
{ 
    return value ? true : false; 
} 
+0

ハンスが示唆したように - これをしないでください、あなたはボクシングとunboxingペナルティが不必要に発生します。 –

1

System::Booleanのご利用状況は、最初の場所で間違っていると、それは三項演算子とは何の関係もありません。値の型を参照として渡さないでください。

不必要なペナルティはありませんが、回答のコードは正常に動作しますが、C#では動作しません。コンパイラは、bool Test(Boolean^ value)関数を呼び出すときに不平を言うでしょう。 C#では参照される値型の概念がないためです。