int main(){(([](){})());} 가 왜 정상적으로 실행되죠?


너무 이상한 코드를 봐서 질문합니다.

밑의 소스코드에서 (([](){})());는 왜 정상적으로 컴파일되는지 모르겠어요 함수 포인터도 아니고, 오퍼레이터도 아니고..

근데 비주얼스튜디오 2010에서 실행하면 아무것도 안 나오고...

저건 뭐하는 건가요 ㅜㅜ??

소스코드

int main(){
    (([](){})());   //  ??????
}
  • 2016년 01월 15일에 작성됨

조회수 229


1 답변


좋아요
0
싫어요
채택취소하기

저런 코드는 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;가 됩니다.

마지막으로. ;는 문장을 끝내는 역할입니다.

  • 2016년 01월 15일에 작성됨

로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close