コロンの特定の使用法が1つわかりません。
私はそれをBjarne Stroustrup 著のC ++プログラミング言語、第4版、セクション11.4.4「呼び出しと戻り」、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
ます。それが何であるか私にはわかりません。ラベルや三項演算子ではありません。
最初のメンバーなし(およびなし?
)の条件付き3項演算子のように見えますが、その場合、条件なしでどのように機能するのかわかりません。
6
私の最後のコンパイルエラーです(gccとclang)。さらに、これらすべての行にはセミコロンが必要ですが、それでもエラーが発生します。
—
Cruz Jean
モデレーターのメモ:投票を行う前に、これを「タイプミス」の質問として締めくくるには、十分に注意してください。はい、問題はタイプミスですが、質問者が作成したタイプミスではありません。むしろ、それは出版された本に見られるものです。つまり、この質問とその回答は、将来、他の人にも役立つ可能性があります。これは、タイプミスとしてクローズするための強力な反指標です。(更新:このトピックは現在Metaで議論されています。お気軽に検討してください。)
—
Cody Grey
おそらく最良の答えは次のとおりです。コードをコンパイルしてみてください。コンパイルできない場合は、それがタイプミスであることを示しています。
—
jrw32982は、
1つのコンパイラでコンパイルに失敗する(または内部コンパイラエラーが発生する)が、別のコンパイラでは問題なく受け入れられるいくつかの例を頭に浮かび上がらせることができます
—
J. Antonio Perez
@ジョン私はMSVCでいくつかのフォールド式を試したところ、コンパイルできませんでした。それで、私が読んだばかりの章全体がタイプミスに違いないのは明らかですか?;)C ++コンパイラは常に有効なC ++コードのコンパイルに失敗します。これは、言語がとてつもなく複雑なためです。
—
Voo