web-dev-qa-db-ja.com

Stroustrupの例では、「return 1:2」でのコロンの意味は何ですか?

コロンの特定の使用方法がわかりません。

私は本にそれを見つけました 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行目に表示されます。私はそれが何であるか分かりません。ラベルまたは三項演算子ではありません。

最初のメンバーなし(および?なし)の条件付き三項演算子のように見えますが、その場合、条件なしでどのように機能するか理解できません。

163
Piockñec

タイプミスです。 C++プログラミング言語の2番目と3番目の印刷の正誤表 を見てください。例は次のようにする必要があります。

auto z3 =[y]() { return (y) ? 1 : 2; }
205
S.M.

単純なタイプミスのように見えます。おそらく:

auto z3 =[y]() { return y ? 1 : 2; }

ラムダはパラメータを受け取らないため、括弧はオプションです。必要に応じて、代わりにこれを使用できます。

auto z3 =[y] { return y ? 1 : 2; }
19
Jerry Coffin

_return 1 : 2;_は構文エラーであり、有効なコードではありません。

正しいステートメントは、代わりにreturn (y) ? 1 : 2;のようになります。

11
Remy Lebeau