MSVCRT std::for each 新しいページはコチラ
提供: yonewiki
19行: | 19行: | ||
− | + | LPWSTR* argvUTF16がw_char型の先頭アドレスを保持していて、例えばargcUTF16の要素数の2を足すと1byte分アドレスが進んだところまで繰り返す感じです。実際にはargvUTF16に要素が1つだけで要素2はNULLになる感じで組み込まれるでしょう。 | |
− | + | ということなので、for_eachで関数を繰り返し実行するようにプログラムはされていますが、単純にQByteArrayテンプレート化されているvector型argvUTF8Qの最後尾に付け足す処理が実行されます。このとき、argvUTF8Qは外からの引数としてラムダ式の [] 内に記述してある必要があります。そして、argにはLPWSTR* argvUTF16のアドレスが渡されconst char* argはキャストされてQString::fromUtf16静的メンバ関数を利用して、UTF-16にエンコードされます。さらにfromUtf16(xxx).toUtf8という記述であるため、UTF-16になった文字列が、UTF-8に変換された値がemplace_backの引数となるため、結局はargがUTF-8になってargvUTF8QというQByteArray型テンプレート化されたvector型の値を最後尾に持つようになります。 | |
+ | |||
+ | |||
+ | ややこしかったかな? | ||
+ | |||
+ | |||
+ | for_eachの動作が分かってもらえたかなと思っています。さらには文字列配列ポインタに整数を1byte分の整数値を足せば次の要素にいけるということです。charは4byteなので2個足すと8byte先に移動します。これは32bitなので、配列で言うと1つ分です。そういうアドレスの型への整数の足し算の仕組みを理解していれば、理解はできると思います。[[Cppラムダ式]]はリンク先でも簡単に説明しています。サンプルプログラムを書くとか言っておきながらさぼってますけど。 | ||
+ | |||
[[Windows#MSVC Runtimeリファレンス|MSVC Runtimeリファレンス]]に戻る | [[Windows#MSVC Runtimeリファレンス|MSVC Runtimeリファレンス]]に戻る |