int main(){(([](){})());} 가 왜 정상적으로 실행되죠?
조회수 2365회
너무 이상한 코드를 봐서 질문합니다.
밑의 소스코드에서 (([](){})());
는 왜 정상적으로 컴파일되는지 모르겠어요
함수 포인터도 아니고, 오퍼레이터도 아니고..
근데 비주얼스튜디오 2010에서 실행하면 아무것도 안 나오고...
저건 뭐하는 건가요 ㅜㅜ??
소스코드
int main(){
(([](){})()); // ??????
}
1 답변
-
저런 코드는
empty lambda
라고 합니다. 실제로 하는 일은 없습니다.첫 번째로,
[](){}
는empty lambda expression
입니다. 편의상 1 =[](){}
라고 두고,(([](){})());
=((A)());
라고 하겠습니다.두 번째로, C/C++의
expression
을 괄호로 묶는 건 코드에 아무런 영향도 미치지 않습니다. 괄호로 묶으나 안 묶으나 똑같은 일을 하지요. 그럼 여기까지(A)
=A
라는걸 아시겠지요.B
=(A)
라고 두고,((A)());
=(B());
라고 하겠습니다.세 번째로,
()
는(empty)
lambda
입니다. 그럼C
=B()
라고 두고,(B());
=(C);
라고 하겠습니다.(C)
는 두 번째 에서 했던 것과 같이 전체expression
이 괄호로 묶여 있지요. 그럼D
=(C)
라고 두고,(C);
=D;
가 됩니다.마지막으로.
;
는 문장을 끝내는 역할입니다.
댓글 입력