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

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

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

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

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

소스코드

int main(){
    (([](){})());   //  ??????
}

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;가 됩니다.

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

ᕕ( ᐛ )ᕗ
로그인이 필요합니다

작성한 답변에 다른 개발자들이 댓글을 작성하거나 댓글에 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.