2017-12-01 1 views
-2

이 코드가 유효하지 않은 이유는 무엇입니까? 나는 lambda sintax를 올바르게 사용하고 있는지 모르지만 다른 게시물을 기반으로하면 괜찮아 보입니다.정적 함수에서 람다 함수를 사용하려고 시도했습니다 (C++)

struct foo{ 
    static int faa(int x); 
}; 

int foo::faa(int x){ 
    bool isCon = []() { 
     return true; 
    }; 

    return isCon(); 
} 
+2

어떤 오류가 발생합니까? – Barmar

+2

lambda는'bool'이 아닌 불확정 유형을 산출합니다.'auto isCon =' – vu1p3n0x

+0

관련 : https://stackoverflow.com/questions/7951377/what-is-the-type-of-lambda-when-deduced -with-auto-in-c11 – Barmar

답변

1

람다에는 불확정 유형이 있으므로 람다 유형에 어떤 유형이 있는지 알 수 없습니다. 대신이 작업을 수행 할 수 있도록 분명히, 당신은 bool 형식의되지 않습니다 정의 된 람다 (이 부울을 반환 할 수 있지만, 하나의하지) : 여기

struct foo{ 
    static int faa(int x); 
}; 

int foo::faa(int x){ 
    auto isCon = []()->bool { 
     return true; 
    }; 

    return isCon(); 
} 

을의 auto 키워드는 추론하도록 컴파일러에 지시 당신을위한 타입. ->bool 표현식은 람다가 bool을 반환한다는 것을 컴파일러에 알립니다.

그러나 foo::faa() 함수는 int를 반환하므로 람다가 bool을 반환 할 수 있으므로 캐스트가 잘못 될 수 있습니다 (질문과는 관계가 없지만 조심해야합니다).

관련 문제