2012-01-05 3 views
0

System :: Boolean에서 3 항 연산자를 사용하는 방법? 이 샘플 코드는 항상 true를 반환 :시스템의 3 항 연산자 :: 부울 변수

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

부울 값 유형입니다. 인수로 boxed 복사본을 전달하는 것은 전혀 이해가되지 않습니다. 물론 객체가 결코 nullptr이 아니기 때문에 코드가 실패하게됩니다. bool로 다시 캐스팅하면 정당한 이유없이 cpu 사이클이 레코딩됩니다.^ –

+0

부울은 C++/CLI에서 자동으로 bool로 변환되므로 왜 3 항 연산자를 사용합니까? Hans가 제안한대로 ^를 버리면, 그냥'value'를 반환 할 수 있습니다. –

답변

0

내 자신의 조기 질문에 대답이 코드는 작동합니다

:이 코드는 잘 작동 더 나은 아직 (한스 '와 매트의 조언과 다음) :

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

편집 부울 및 부울 컨버터블 때문에

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

또는,이 또한 다른 곳에서 발생 자동 변환에 의존 좋은 코드입니다.

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

한스 (Hans)가 제안했듯이 - 이렇게하지 않으면 불필요하게 복싱 및 언 박싱 페널티가 발생합니다. –

1

System::Boolean 귀하의 사용은 처음부터 잘못하고 삼항 연산자와 아무 상관이있다 : 예 삼항 연산자를 보여주는를 제외하고 거의 의미가 있습니다. 절대 값 유형을 참조로 전달하지 마십시오.

불필요한 페널티가 없다해도 답안의 코드는 작동하지만 C#에서는 작동하지 않습니다. 컴파일러는 bool Test(Boolean^ value) 함수를 호출하려고 할 때 불평 할 것입니다. 왜냐하면 C#에서는 참조 된 값 유형의 개념이 없기 때문입니다.