2012-02-28 2 views
2

가능한 중복 :
C++ Comma Operator이 배열 초기화는 어떻게됩니까?

나는

int main() 
{ 
    int arr[3]= { (1,3), 2, 4 }; 
    cout << arr[0] << " " << arr[1] << " " << arr[2] << endl; 
} 

으로 배열을 초기화하고 나는 그것을 컴파일 타임 오류를 줄 것이라고 생각하지만 벌금을 실행 중입니다. 배열은 3,2,4 값으로 초기화되고 출력은 3 2 4입니다.

누군가 여기서 일어나는 일을 설명 할 수 있습니까?

int x = (1,3); 
assert(x==3); 

일이 왜

+0

이 질문은 중복 다른 어떤 방법에 대한 설명을 포함해야한다 재개하기위한 투표. 생각할 수 없다면 다시 열지 마십시오. –

답변

4

쉼표 연산자가 있습니다. 기본적으로, 식 :

1,7 

1을 평가하지만 (위 광산뿐만 아니라)이 특정 형태가 유용 아니라고 7.

"반환"하지만 당신이 좋아하는 일을 할 수있는 것 :

x = a++, 1; 

모두 증가 ax을 1로 설정하십시오 (유용성은 부작용에서 비롯됨).

당신은 반드시 그것을 실현하지 않고 전에 본 것이다 :

for (i = 0, j = 0; i < 4; i++, j++) ... 
+0

많은 감사 :) – manyu

2

같은 이유.

이것이 바로 쉼표 연산자의 작동 방식입니다. "을 반환합니다"는 마지막 표현 인 동시에 (잠재적으로) 두 가지를 모두 평가합니다.