C ++에서 쉼표 연산자의 다른 동작이 반환됩니까?
다음은 쉼표 연산자에 유의하세요 .
#include <iostream>
int main() {
int x;
x = 2, 3;
std::cout << x << "\n";
return 0;
}
출력 2 .
그러나 return
쉼표 연산자와 함께 사용 하는 경우 다음 과 같습니다.
#include <iostream>
int f() { return 2, 3; }
int main() {
int x;
x = f();
std::cout << x << "\n";
return 0;
}
출력 3 .
쉼표 연산자가 다르게 작동하는 이유는 무엇 return
입니까?
받는 따르면 운영자 우선 순위 , 콤마 연산자는 보다 낮은 우선 가지고 operator=
있으므로 x = 2,3;
등가이다 (x = 2),3;
. (연산자 우선 순위는 우선 순위에 따라 연산자가 다른 연산자보다 더 단단하거나 느슨하게 인수에 바인딩되는 방법을 결정합니다.)
쉼표식이 (x = 2),3
아니라 여기에 2,3
있습니다. x = 2
처음에 평가되고 (그리고 그 부작용이 완료 됨) 결과가 폐기 된 다음 3
평가됩니다 (실제로 아무 작업도하지 않음). 그래서의 값 x
이 2
. 주 3
전체 쉼표 표현 (즉,의 결과는 x = 2,3
)에 할당하는 데 사용되지 않습니다 x
. (변경 그것은하는 x = (2,3);
, x
할당됩니다 3
.)
를 들어 return 2,3;
, 쉼표 표현은 2,3
, 2
다음 평가의 결과는 폐기하고 3
평가에 의해 반환되는 전체 쉼표 표현의 결과로 반환 return 문 이상.
표현식은 계산을 지정하는 일련의 연산자와 해당 피연산자입니다.
x = 2,3;
is expression statement , x = 2,3
은 여기에있는 표현식입니다.
세미콜론이 뒤에 오는 표현식은 명령문입니다.
통사론:
attr(optional) expression(optional) ; (1)
return 2,3;
는 점프 문 ( return 문 )이며 2,3
여기에있는 표현식입니다.
통사론:
attr(optional) return expression(optional) ; (1)
쉼표 ( 표현식 분리 라고도 함 ) 연산자는 왼쪽에서 오른쪽으로 평가됩니다. 그래서 return 2,3;
동일합니다 return 3;
.
의 평가 x = 2,3;
이다 (x = 2), 3;
때문에 연산자 우선 순위 . 평가는 여전히 왼쪽에서 오른쪽으로 이루어지며 전체 표현식은 값 2를 x
가정하는 부작용과 함께 값 3을 갖습니다 .
이 진술 :
x = 2,3;
두 가지 식 으로 구성됩니다 .
> x = 2
> 3
이후 운영자 우선 순위 , =
콤마보다 우선 순위를 가지고 ,
, 그래서 x = 2
계산되고 이후 3
. 다음 x
과 같아야합니다 2
.
에서 return
대신 :
int f(){ return 2,3; }
언어 구문은 다음과 같습니다.
return <expression>
메모 return
는 표현의 일부가 아닙니다.
따라서이 경우 두 표현식은 다음과 같이 평가됩니다.
> 2
> 3
그러나 두 번째 ( 3
) 만 반환됩니다.
Try to apply the simplistic approach just highlighting the precedence with parenthesis:
( x = 2 ), 3;
return ( 2, 3 );
Now we can see the binary operator "," working in the same way on both, from left to right.
참고URL : https://stackoverflow.com/questions/39364263/different-behaviour-of-comma-operator-in-c-with-return
'Programing' 카테고리의 다른 글
문자열이 비어 있지 않거나 쉘 스크립트에서 공백이 아닌지 확인하십시오. (0) | 2020.10.07 |
---|---|
앱 그룹을 사용하여 앱간에 데이터 통신 및 유지 (0) | 2020.10.07 |
Google Play 앱 서명을 활성화하는 방법 (0) | 2020.10.07 |
드롭 다운의 변경 이벤트 트리거 (0) | 2020.10.07 |
CSS (웹킷) : 절대 위치 요소에서 상단을 하단으로 재정의 (0) | 2020.10.07 |