는 조건 연산자에서 반환 된 다음 말씨를 제외하고, 거의 내 질문에 대한 대답 Return type of '?:' (ternary conditional operator)반환 유형 : C++ 입문서 연산자, 그리고 말씨 내가 유형과 값 카테고리의 개요를 얻을이 게시물을 읽을
C++에서 같은 것을 설명하는 입문서는 약간 혼란 스럽습니다.
"양쪽 표현식이 모두 왼쪽 값 이거나 일반 왼쪽 값 유형으로 변환되는 경우 조건 연산자의 결과가 lvalue입니다. 그렇지 않으면 결과가 rvalue입니다."
굵게 표시된 비트는 나를 벗어 버립니다. y 및 z는 모두 좌변 타입이다 (물론, Z는 하나가 변환 된 것) int로 변환 될 수 있기 때문에, 예
int main(){
int y = 2;
char z = 3;
((50<60) ? y : z) = 3;
}
괜찮을 것 들어 이리에 제안 (오른쪽?) 따라서 조건 연산자는 값의 범주로 lvalue를 부여합니다. 그러나 이것은 실제로 rvalue를 제공하기 때문에 컴파일되지 않습니다. 아무도 굵은 글씨로 언급 된 예외적 인 사례를 제공 할 수 없으므로 어떤 점을 이해할 수 있습니까?
내 이해가 같다 : 표현식이 같은 유형의 lvalues이면 해당 유형의 lvalue가 반환됩니다. 그렇지 않으면 (일부 컴파일러가 결정한 유형의) rvalue가 리턴됩니다.
감사합니다. 그것은 최소한 물건을 깨끗이합니다. 나는 마지막 예가 지금 당장 나의 리그에서 조금 벗어나 있다고 생각하지만, 나는 변환 운영자에 대해 더 많이 배울 때 다시 돌아올 것이다. – Silversonic