나는 3 진 연산자 ("? :")를 if 문처럼 사용하고 싶다. 정확하게 말해서 나는 (temp> 0) if increment else '아무것도하지 않는다.3 진 연산자를 if 문처럼 사용하는 방법?
temp?i++:WHAT_SHOULD_COME_HERE_SO_NO_CHANGES_ARE_MADE_ANYWHERE
나는 3 진 연산자 ("? :")를 if 문처럼 사용하고 싶다. 정확하게 말해서 나는 (temp> 0) if increment else '아무것도하지 않는다.3 진 연산자를 if 문처럼 사용하는 방법?
temp?i++:WHAT_SHOULD_COME_HERE_SO_NO_CHANGES_ARE_MADE_ANYWHERE
(boolean expression) ? (returning expression) : /* no-op */;
뭔가. 그러나 세 가지 연산자를 평가하는 사후 조건 측면에서 무언가와 행동 상으로 동등한 "무언가"를 만들 수 있습니다. 아래를 참조하십시오.
설명 및 형태는 두 번째와 세 번째 오퍼랜드의 각각의 복귀 형태의 슈퍼는 가장 파생 형으로 추론된다. 따라서 세 번째 피연산자가 빈 표현식이면 (즉, 아무 것도 반환하지 않는 경우) 컴파일러는 전체 연산자에 대한 반환 유형을 추론 할 수 없습니다. 따라서 컴파일되지 않습니다. 삼항 연산자를 사용
:
i = temp>0 ? i+1 : i;
또는
:당신이 정말로 원하는 경우, 이것은 당신이 삼항 연산자를 사용하여 그것을 할 수있는 방법입니다
temp>0 ? ++i : i;
기본 구문 : 당신이 찾고있는 모두가 한 줄을 경우
은 다음 구문을 선호하고 있지만 :
if (temp>0) ++i;
표현식에 삼항 연산자가 사용됩니다. 따라서 전체 표현식은 단일 값으로 평가되어야합니다. 즉, "if"및 "else"절을 모두 입력해야합니다. "else"부분을 공백으로 남겨 둘 방법이 없습니다.
또한이 같은 표현식 안에 증가 연산자를 삽입하는 것은 부작용의 결과가 오류가 발생하기 쉽지 않으므로 권장하지 않습니다.
이 작동됩니다
(void) ((temp>0)?i++:0);
(void)는 코드의 동작을 변경하지 않습니다. 오히려 그것은 표현의 결과가 고의적으로 버려진다는 것을 독자 (그리고/또는 미래에 호출 할 수있는 스타일 검사 프로그램)에게 알려주는 것입니다. 이를 사용하지 않으면 컴파일러 및/또는 버그를 의심하고 코드를 "수정"하려고하는 다른 프로그래머로부터 경고를받을 수 있습니다.
사실, 위의 내용은 당신이하려는 일을 표현하는 매우 특별한 방법이기 때문에 어쨌든이를 얻을 수 있습니다.
if (temp>0) i++;
'void '주조가있는 부분이 작동하지 않습니다. 형변환을 사용하려면 전체 표현식에 괄호를 추가하십시오 (그러나 추악 해집니다). – anatolyg
네 말이 맞아. 나는 괄호를 추가했습니다. 이미 추악했기 때문에 아무것도 잃어 버리지 않았습니다. –
당신이 할 수 있습니다 :
이int temp = 20, i = 0;
(temp)? i++: i;
cout << i << endl;
그런 다음 삼항 연산자를 사용하지 않는 ... 다른 사람들이 이해하고 대신 기존의 양식을 사용하는 경우 유지하는 코드는 쉽게 될 것인가? – Li357
'?'는'if ... else'를 나타냅니다. 'if'가있는 경우'if (condition) action;을 사용하지 않는 이유 – NathanOliver
"else"부분을 비워 둘 수 없습니다. –