할당의 순서 :나는 다음과 같은 코드의 행동에 대한 약간의 설명을 찾고 값
int a = 1;
int b = (4,5,6);
cout<<a+b;
왜 B는 마지막 값 6 걸리는 그것입니다?
편집 : 죄송합니다, 나는 당신의 코드는 문법적으로 유효하지 않습니다는 B의 값이 6
할당의 순서 :나는 다음과 같은 코드의 행동에 대한 약간의 설명을 찾고 값
int a = 1;
int b = (4,5,6);
cout<<a+b;
왜 B는 마지막 값 6 걸리는 그것입니다?
편집 : 죄송합니다, 나는 당신의 코드는 문법적으로 유효하지 않습니다는 B의 값이 6
미안 해요를 얻는 방법을 설명하기위한 모든 덕분에 잘못된 예를했다.
2
및 3
은 선언 이름이어야합니다. c
및 d
처럼
쉼표 연산자를 사용하려면 1, 2, 3
을 괄호로 묶어야합니다.
나는이 사고를 용서하고 설명을 계속합니다.
operand1 , operand2
으로 사용되는 쉼표 연산자를 사용하면 operand2
의 값 (또는 왼쪽 값)이 표시됩니다. 따라서 b
을 6
으로 초기화합니다 (쉼표 연산자가 연관성을 유지하므로 (4, 5), 6
과 같이).
"나는 너에게이 사고를 용서하겠다."친구 야. –
@ TamásSzelei : 그 사람은 그것을 할 수있다 : D – Griwes
@Tam 나는 왜 너를 불쾌하게하는지 모른다. 나는 그 라인에서 아무런 의미를 없애려고 노력하지 않았을 수도있다. 용감한자인 Benjamin과 함께하셔야하며 그 코드에서 또 다른 가능한 의미를 추측 할 수 있습니다. –
코드가 유효하지 않지만 선언에서 별도의 줄로 할당을 이동하면 해당 코드는 유효하며 다음과 같이 동작이 설명됩니다. 쉼표 연산자는 우선 순위가 가장 낮으며 할당이 짝수가 아닙니다. 그래서이 라인 :
a = 1,2,3;
은 다음과 같이 해석됩니다 :이 읽은대로이 줄을 정확하게 해석 될 수 있지만
(a = 1),2,3;
:
b = (4,5,6);
쉼표 연산자는 그것의 결과를 폐기 남아 피연산자이므로 다음과 같이 단순화 할 수 있습니다.
b = 6;
왜이 작업을 수행하려고합니까? 너는 무엇을 목표로하고 있니? 변수 a는 한 번에 하나의 값만 가질 수 있으며 배열과 같은 정렬을 할당하려고합니다. 당신도 원하는처럼 추가 기운 다,
int[] a = {1,2,3};
int[] b = {4,5,6};
을하지만 :
이 작업을 할 수 있습니다. 두 배열을 반복하여 추가해야합니다.
for (int i = 0; i < 3; i++)
{
std::cout << a[i] + b[i];
}
당신은 [쉼표 연산자] (http://en.wikipedia.org/wiki/Comma_operator)를 알지 못합니까? 아니면 그가 실제로 배열을 만들려고한다는 것을 암시하고 계십니까? (당신이 잘못 될 것이라고 말하는 것은 아닙니다, 그것은 완벽하게 유효한 해석입니다) –
예, 그것이 제 가정입니다. 이와 같이 쉼표 연산자를 사용하는 것은 실제 목적이 없기 때문입니다. – bungiman
콤마 연산자 순서대로 왼쪽에서 오른쪽 (이 시퀀스 지점을 정의) 평가하고, 그 값은 가장 오른쪽 피연산자이다. 이 b = (4,5,6);
=
의 우선 순위가 너무 이상 ,
인 경우를 설명하면 :
3
(a = 1), 2, 3;
이지만은 :
a = 1,2,3
동등 1
이 지정되었습니다.
int a = 1, 2, 3;
가 잘못되었습니다
(오퍼레이터 등) 쉼표의 사용은 어떤 말을하는 이유 인 선언 목록에서 다르다. 나는 솔직히 자신을 확신하지 못하지만 모호함은 훌륭한 스타일이 아닙니다. 쉼표 모두 다른 용도는 다음과 같습니다
int a = 1, b = 2, c = 3; // declaration list
과 :
int a;
a = 1, 2, 3; // a is assigned 3
너의 사이 어딘가에있다.
그리고 첫 번째 라인을 어떻게 컴파일 했습니까? – Kevin