区切って複数の部分式を書くことができ、その結果は最後に書いた部分式の値となります。"\n";カンマ演算子の優先順位は非常に低いので多くの場合、()で括らないとコンパイルエラーになったり、意図しない結果になったりしますので、注意が必要です。0(上記の式はgccでは「カンマの左側は何の効果もない」の意味の警告がでます。今は気にしないでください。123と書いたりできます。後者は文のように見えますが、式です。std::ostreamのoperator<<()という関数を呼び出します。この関数はstd::ostreamの参照を返却します。"\n"が実行され、その後カンマの右側の値0がxに初期設定されます。30(因みに、今度はカンマの左側はそれなりに処理をしているので「何の効果もない」警告はでません。)次に、配列の初期化は次のように書けますね。3)の部分に先程のカンマ演算子をはめ込んでみます。"\n";}102030123このように実行順序は定義順となります。これは配列の初期化子の評価順ですので標準規格上保証されています。このdummyは実体に名前を付けているので少し鬱陶しいです。似たような複数の処理を同じ{}ブロック内で実装する場合、異なる名前を付けたり、{}ブロックで改めて囲んだりすることになります。3};ができれば良いのですが、これはどうやらできないようです。型名に名前をつければ良いみたいです。(型名は使い回しできます。0)};gccでは警告はでないのですが、clangでは「配列を定義したけど使っていない」旨の警告がでるようです。確かにその通りですね。voidでキャストすることで警告を消せます。C言語スタイルのキャストはあまり使わない方がよいのですが、キャストした結果を使うわけではないのでスッキリ記述するためにCスタイルでキャストしてます。};}102030Wandboxで確認する。2-2.Swallowテクニックを使って関数パラメータ・パックを展開するここまで見ればだいたい見当が付くかと思いますが、関数パラメータ・パックを上記テクニックにて展開してみます。[6]>]カンマ区切りで1行に収めることもできます。threeWandboxで確認する。3.まとめ今回はパラメータ・パックの加工例と再帰を使わない関数パラメータ・パックの展開方法を解説しました。後者はヘルパー関数テンプレートが不要となり単純化できました。記事中で参照したQiitaの_Enumhackさん(twitterでは「いなむ先生」と呼ばれているようです)の記事を見るまで知らなかったのですが、これは本当に便利ですね。この記事はパラメータ・パックについてより網羅的に纏められています。広く把握されたい方は是非参照されて下さい。知的好奇心を刺激されると思います。これ以上パラメータ・パックを引っ張るのもどうかと思ったのですが、もう少し解説させて下さい。関数パラメータ・パックは大胆な加工ができてびっくりだったのですが、テンプレート・パラメータ・パックも意外に大胆な加工が可能です。次回、そのあたりを解説してみたいと思います。04:03>もし、std::stringを渡してコピーするとコピーコストが気になります。(ヒープメモリ獲得コストもかかりますし。十分に短い文字列のstd::stringへのコピーはアロケートを省く事ができます。11:18コメント、ありがとうございます。SSOが効いている時はヒープを獲得しないので効率的とはいえ、ポインタを1つコピーするのに較べるとコピー・コストは大きいですね。SSOについてのmelponさんの解説、判りやすいですよね。私もそこでSSOのことを把握しました。実は応用講座の第13回の記事でちょっと触れています。02:30>実は応用講座の第13回の記事でちょっと触れています。あ、これは大変失礼しました。コメントをキャンセルメールアドレスが公開されることはありません。テクノロジーの登録商標です。technology.。