그래서 삼진 연산자 (적어도 Visual C++ 98-2010에서는)에 대해 몰랐던 흥미로운 점을 발견했습니다. http://msdn.microsoft.com/en-us/library/e4213hs1(VS.71).aspx에서 지적했듯이 expression과 conditional-expression이 모두 l 값인 경우 결과는 l 값입니다.C++ 삼항 연산자
당신은 같은 것을 써서 ++ 보통의 C/C가 물론: 심지어 r 값/L 값 involvment 신경
int value = (x == 1) ? 1 : 0;
결코를,이 경우도 1이나 0 l 값으로 변환 가능합니다.
int value = (x == 1) ? y : z;
Y 및 Z 모두 -1- 값들은,보다 구체적으로, 그 중 하나는 원 운전자의 실제 결과는 경우 (그 저장된 값 :
그러나, 같은 것을 취할) 반드시 분명하지는 않습니다 (적어도 나는 그것에 대해 생각 해본 적이 없다). 즉 리드 무엇
하지만, 99를 할당 다음
(x == 1 ? y : z) = 99;
를 작성하는 기능이다 (Y)의 경우, Z의 경우 X! = 1
I에 X == 1 99 어디서나 그리고 모든 논의에서 내가 사용했던 (또는, 보통, 사용할지 여부) 3 진 연산자에 대해 읽은 것을 보지 못했습니다. 표현 조건부 표현 모두
(x == 1 ? 0 : z) = 99;
0으로 행복하게 컴파일러에 의해 지적에 R 값이기 때문에 컴파일에 실패 같은 1- 값 뭔가 있다면 물론
은에만 작동합니다.
그리고 당신은
x == 1 ? y : z = 99;
는 경우에만 Z에 99을 할당 완전히 다른 무언가 괄호 포함하는 경우에만 작동 (X에게! = 1) 아름다운 부분은 양측이 여전히 리터 있다는 것입니다 값은 (x == 1 ? y : z = 99) = 100
과 같은 것의 심각한 쥐 구멍이 있습니다 (x == 1의 진리에 따라 y 또는 z에 100을 지정하고 x == 1이 false 인 경우 z = 99 지정에 대해 쾅쾅 소리를냅니다)
그럼 내 질문에 이르게됩니다.
A)이 부분은 실제 C++ 표준 (그럴 것 같음)의 일부이며 Microsoft의 것만은 아니며 - 보았지만 지금까지이 정보를 찾지 못했습니다.
B) 널리 실현되고 있으며 바위 아래에서 살고 있다면? 내가 기억할 수있는 코드에서는 사용 된 적이 한번도 본 적이 없으며, 삼항 연산자가 논의 될 때 언급 된 코드는 본 적이 없다.
C) 더 자주 나가야합니까?
예) 내 희미한 기억에 따라 B) 예, 거기에 더 많은 공간이 있습니까? C) 도움이 되겠습니까? 무엇으로? – peterchen
(B) 무지가 행복 할 때 '어리 석다'는 현명합니다. –
읽기 어렵 기 때문에 이전에는 본 적이 없습니다. 코드를 읽기가 어렵다는 것은 유지 보수성에 좋지 않습니다. –