コロンの特定の使用方法がわかりません。
私は本にそれを見つけました The C++ Programming Language Bjarne Stroustrup、第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
}
紛らわしいコロンは、ステートメントreturn 1 : 2
の7行目に表示されます。私はそれが何であるか分かりません。ラベルまたは三項演算子ではありません。
最初のメンバーなし(および?
なし)の条件付き三項演算子のように見えますが、その場合、条件なしでどのように機能するか理解できません。
タイプミスです。 C++プログラミング言語の2番目と3番目の印刷の正誤表 を見てください。例は次のようにする必要があります。
auto z3 =[y]() { return (y) ? 1 : 2; }
単純なタイプミスのように見えます。おそらく:
auto z3 =[y]() { return y ? 1 : 2; }
ラムダはパラメータを受け取らないため、括弧はオプションです。必要に応じて、代わりにこれを使用できます。
auto z3 =[y] { return y ? 1 : 2; }
_return 1 : 2;
_は構文エラーであり、有効なコードではありません。
正しいステートメントは、代わりにreturn (y) ? 1 : 2;
のようになります。