Comma Operator
콤마 연산자
- 콤마 연산자는 두 개의 표현식을 하나로 결합하는 연산자이다.
- 문법 규칙 상, 하나의 표현식만을 허용하는 자리에 콤마 연산자를 사용하면 두 개의 표현식을 동시에 표현할 수 있다.
- 콤마 연산자는 연산자 중 우선순위가 가장 낮은 연산자이다.
- 콤마 연산자는 첫 번째 표현식을 먼저 평가한 후, 그 다음 표현식을 평가한다.
(이러한 면에서 콤마 연산자는 Sequence Point 역할을 수행한다.)
- 또한, 두 번째 표현식을 콤마 표현식 전체의 값으로 만들면서 표현식의 원칙에도 일맥상통한다.
i = 20, j = 2 * i;
// 여기서 콤마 연산자가 시퀸스 포인트 역할을 함으로써
// i에 20이 대입된채로, j에 대한 연산이 수행되게 된다.
- 콤마가 반드시 콤마 연산자로만 사용되는 것은 아니며, 변수 리스트에서 인접한 변수 이름을 분리하는 데 쓰이는 콤마는 Separator(분리자)라고 부른다.
++j, --i // 여기서 콤마는 콤마 연산자이다.
int j, i; // 여기서 콤마는 분리자이다.
int j = 0, i = word.size() - 1;
// 여기서 사용된 콤마 또한 분리자이다.
Comma Operator Usage (콤마 연산자 사용예시)
- 일반적으로 콤마 연산자는 두 개 이상의 표현식을 하나의 for 루프 표현식으로 결합하는 데 사용한다.
for (int i = 0, j = 0; i < 10; i++, j--) {
...
}
// 여기서 루프 초기화 부분의 콤마는 분리자이며,
// 루프 업데이트 부분의 콤마는 콤마 연산자이다.
- 콤마 연산자는 연산자들중 우선순위가 가장 낮다.
cats = 17, 240;
// 위 표현식에서 콤마 연산자보다 대입 연산자가 우선시되므로
(cats = 17), 240;
// 이와 같이 해석할 수 있다.
- 최종적으로 평가된 표현식이 그 표현식 전체의 값이 된다는 점에서 아래의 코드는 이렇게 해석된다.
cats = (17, 240);
// 콤마 연산자는 17이라는 표현식을 평가한 다음, (사실 아무일도 일어나지 않는다.)
// 최종적으로 우변의 전체 표현식의 값을 240으로 평가한 다음,
// 변수 cats에 대입시킨다.
cats = 240;
// 이와 같이 해석할 수 있다.