3

簡単なコードを見つけました:

using namespace boost::lambda;
typedef std::istream_iterator<int> in;
std::for_each(
    in(std::cin), in(), std::cout << (_1 * 3) << " " );

が各入力整数を表すために使用されていることがわかりまし_1たが、これはどのように機能し_1ますか? 誰でも知っていますか?

PS: このコードは、BOOST の最初の例からのものです。ファイルを実行したところ、for_each が終了することはなく、「return」をクリックするたびに読み取り番号が保持されることがわかりました。なぜこれが起こったのですか?

4

2 に答える 2

4

これはプレースホルダーのように見えます(このSOの質問も見てください) :

名前std::placeholders空間には、[_1, . . . _N]N が実装定義の最大数であるプレースホルダー オブジェクトが含まれます。

式で引数として使用されるとstd::bind、プレースホルダー オブジェクトは生成された関数オブジェクトに格納され、その関数オブジェクトがバインドされていない引数で呼び出されると、各プレースホルダー _N は対応する N 番目のバインドされていない引数に置き換えられます。

プレースホルダー オブジェクトの型はDefaultConstructibleと でありCopyConstructible、それらの既定のコピー/移動コンストラクターは例外をスローしません。また、すべてのプレースホルダー_Nに対して型std::is_placeholder<decltype(_N)>が定義され、 から派生しstd::integral_constant<int, N>ます。

于 2013-10-10T06:31:08.780 に答える