2016-06-18 2 views
1

속도면에서 목표 C에서 if/else 문과 ternary operator을 사용하는 데는 어떤 차이가 있습니까? 그것들은 컴파일 된 코드에서 동일합니까?객관적인 C에서 삼항 연산자 대/다른 경우

즉, 공간을 절약하기 위해 다음 중 하나를 사용해야하는 이유가 있습니까?

//First Option 
Object *myObj = boolean ? trueValue : falseValue; 

//Second Option 
Object *myObj; 
if (boolean) { 
    myObj = trueValue; 
else { 
    myobj = falseValue; 
} 

답변

1

컴파일 된 코드에 약간의 차이가있을 수 있지만, 다른 방법을 선호하는 것이 가독성 이외의 이유는 없습니다.

if/ else 방법의 장점 중 하나는 하나의 상태로 여러 변수를 설정할 수있다

:

Object *myObj1; 
Object *myObj2; 
if (boolean) { 
    myObj1 = trueValue1; 
    myObj2 = trueValue1; 
else { 
    myobj1 = falseValue2; 
    myobj2 = falseValue2; 
} 

오브젝티브 C 부울 값 0과 1과 숫자 형이므로이 존재 조건부에 전혀 의존하지 않는 접근 방식 :

Object *valArray[] = { falseValue, trueValue }; 
Object *myObj = valArray[boolean]; 
+0

배열 방법이 안전하지 않습니다. 실제 값은 정확하게 1로 제한되지 않으며 값은 부울이 생성되는 방법에 따라 달라집니다. – Avi

+0

@Avi Obj-C가 0이 아닌 값을 부울 true로 해석하는 것은 사실이지만 모든 논리 연산자는 0 또는 1을 반환해야합니다. 자신의 부울의 출처에 대해 확실하지 않을 때, 그는 이중 느낌표 트릭 즉, !! 부울을 적용 할 수 있습니다. – dasblinkenlight