4
([] () -> decltype(std::cout << "Hello") {
    return std::cout << "Hello";
}()) << ", world!";

印刷しHello, world!ます。

ここで何が起こっているのか分かりません。誰かが私に簡単な言葉で説明できますか?

4

1 に答える 1

6
([] () -> decltype(std::cout << "Hello")

これにより、式が持つのと同じ戻り値の型を持つラムダ (インプレース関数) が作成されstd::cout << "Hello"ますstd::ostream&。は[]ラムダを開始し、()は空のパラメーター リストであり->、戻り値の型の前decltype(X)にあり、式 X の型と同等です。次に、関数本体:

{
    return std::cout << "Hello";
}

次に、「Hello」を出力してストリームを返す関数が呼び出されます....

 ())

そして最後に、返されたストリームに、もう少しテキストが送信されます...

 << ", world!";
于 2013-05-21T01:06:57.190 に答える