조건식의 유형 추론
조건 연산자(?:)는 C의 강력한 도구로, 간결하고 표현력이 풍부한 코드를 허용합니다. 그러나 올바른 사용을 위해서는 이 연산자의 결과 유형을 이해하는 것이 중요할 수 있습니다.
다음 코드 예제를 고려하세요.
int x = 1; int y = 2; (x > y ? x : y) = 100;
이 경우 첫 번째 조건부 연산자는 rvalue로 평가됩니다. 두 피연산자가 모두 int 유형이므로 int를 입력합니다. 따라서 할당은 유효합니다.
그러나 다음 예에서는
int x = 1; long y = 2; (x > y ? x : y) = 100;
두 번째와 세 번째 피연산자의 유형이 다르기 때문에 조건 연산자를 lvalue로 평가할 수 없습니다. 결과적으로 이 표현식에 대한 할당은 유효하지 않습니다.
error: lvalue required as left operand of assignment | (x > y ? x : y) = 100; | ~~~~~~~^~~~~~~~
이 동작을 이해하려면 C의 값 범주 개념을 자세히 살펴봐야 합니다.
조건식은 해당 유형을 상속하고 피연산자의 값 범주입니다. 두 피연산자가 모두 lvalue이면 조건식도 lvalue입니다. 피연산자 중 하나가 rvalue이면 조건식은 rvalue입니다.
첫 번째 예에서 x와 y는 모두 동일한 유형의 lvalue이므로 조건식은 int 유형의 lvalue로 평가됩니다. 두 번째 예에서 x는 lvalue이지만 y는 rvalue이므로 조건식을 lvalue로 평가할 수 없습니다.
조건 연산자의 값 범주는 컴파일 타임에 결정된다는 점을 기억하는 것이 중요합니다. 조건이 false로 평가되더라도 조건식의 유형 및 값 범주는 일관되게 유지되어야 합니다. 이는 할당 연산자의 왼쪽이 lvalue여야 한다는 규칙에 따른 것입니다.
위 내용은 C 유형 추론은 조건식의 Lvalue/Rvalue 동작에 어떤 영향을 줍니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!