콜론의 특정 용도를 이해하지 못합니다.
이 책 은 Bjarne Stroustrup 의 C ++ 프로그래밍 언어 , 제 4 판, 11.4.4 "Call and Return"섹션, 297 페이지에서 찾아 볼 수 있습니다.
void g(double y)
{
[&]{ f(y); } // return type is void
auto z1 = [=](int x){ return x+y; } // return type is double
auto z2 = [=,y]{ if (y) return 1; else return 2; } // error: body too complicated
// for return type deduction
auto z3 =[y]() { return 1 : 2; } // return type is int
auto z4 = [=,y]()−>int { if (y) return 1; else return 2; } // OK: explicit return type
}
혼란스러운 콜론은 7 번 줄에 나타납니다 return 1 : 2
. 나는 그것이 무엇인지 모릅니다. 레이블 또는 삼항 연산자가 아닙니다.
첫 번째 멤버가없는 (및없는 ?
) 조건부 삼항 연산자처럼 보이지만 그 경우 조건없이 작동하는 방법을 이해하지 못합니다.
6
내 끝에 컴파일 오류입니다 (gcc 및 clang). 또한 이러한 모든 줄에는 세미콜론이 필요하지만 여전히 오류가 있습니다.
—
Cruz Jean
사회자 주 : 이 질문을 "오타"질문으로 마무리하기 위해 투표를하기 전에 신중하게 생각하십시오. 그렇습니다. 문제는 오타이지만 질문자가 만든 오타가 아닙니다. 오히려 그것은 출판 된 책에서 발견 된 것입니다. 이는이 질문과 그 답변이 미래에 다른 사람들에게도 유용 할 수 있음을 의미하며, 이는 오타로 닫는 강력한 카운터 표시기입니다. (업데이트 :이 주제는 현재 메타에 대해 논의 중입니다 . 부담없이 말씀해주세요.)
—
Cody Grey
아마도 가장 좋은 대답은 다음과 같습니다. 코드를 컴파일하십시오. 컴파일되지 않으면 오타임을 나타냅니다.
—
jrw32982는 Monica
나는 하나의 컴파일러에서 컴파일 (또는 내부 컴파일러 오류가 발생) 실패 내 머리 위로 떨어져 예를 생각해 볼 수 있지만, 다른 하나 문제없이 허용됩니다
—
J. 안토니오 페레즈
@ John 방금 MSVC로 폴드 표현식을 시도했지만 컴파일하지 않았습니다. 내가 방금 읽은 장 전체가 오타 여야합니까? ;) C ++ 컴파일러는 항상 유효한 C ++ 코드를 컴파일하지 못합니다. 언어는 터무니없이 복잡합니다.
—
Voo