MSVCRT std::for each 新しいページはコチラ

提供: yonewiki
移動: 案内, 検索
(概要)
(概要)
 
22行: 22行:
  
  
 LPWSTR* argvUTF16がw_char型の先頭アドレスを保持していて、例えばargcUTF16要素数の2を足すとargvUTF16のアドレス格納bit数(32bit(=4byte) or 64bit(=8Byte)) 要素数2個分進んだところまで繰り返す感じです。例えば、argvUTF16に要素が1つだけならば、要素2はNULLになる感じで組み込まれるているので、for_eachの繰り返しは要素番号1の文字列、そして要素番号2のNULLの2つについて処理が行われ、NULLを受け取ったfor_eachはそこで処理を終えます。
+
 LPWSTR* argvUTF16がw_char型の先頭アドレスを保持していて、例えばargcUTF16要素数の2を足すとargvUTF16のアドレス格納bit数(32bit(=4byte) or 64bit(=8Byte)) に対して要素数2個分進んだところまで繰り返す感じです。例えば、argvUTF16に要素が1つだけならば、要素2はNULLになる感じで組み込まれるているので、for_eachの繰り返しは要素番号1の文字列、そして要素番号2のNULLの2つについて処理が行われ、NULLを受け取ったfor_eachはそこで処理を終えます。
  
  
 ということなので、for_eachで関数を繰り返し実行するようにプログラムはされていますが、要素数が2で、文字列が格納されている要素が実質1であれば、単純にQByteArrayテンプレート化されているvector型argvUTF8Qの最後尾に文字列を付け足す処理が実行されます。このとき、argvUTF8Qあとで、使いたいのでfor_each内だけのオブジェクトでは活用できません。外からの引数としてラムダ式の [] 内に記述してある必要があります。[]はキャプチャと呼ばれます。そして、argにはLPWSTR* argvUTF16のアドレスが渡されconst char* argはキャストされてQString::fromUtf16静的メンバ関数を利用して、UTF-16にエンコードされます。さらにfromUtf16(xxx).toUtf8という記述であるため、UTF-16になった文字列が、UTF-8に変換された値がemplace_backの引数となるため、結局はargvUTF16から取り出された引数のargがUTF-8になってargvUTF8QというQByteArray型にテンプレート化されたvector型の値として、UTF-8形式の文字列を最後尾に持つようになります。
+
 ということなので、for_eachで関数を繰り返し実行するようにプログラムはされていますが、要素数が2で、文字列が格納されている要素が実質1であれば、単純にQByteArrayテンプレート化されているvector型argvUTF8Qの最後尾に文字列を付け足す処理が実行されます。このとき、argvUTF8Qをあとで、使いたいのでfor_each内だけのオブジェクトでは活用できません。外からの引数としてラムダ式の [] 内に記述してある必要があります。[]はキャプチャと呼ばれます。そして、argにはLPWSTR* argvUTF16のアドレスが渡されconst char* argはキャストされてQString::fromUtf16静的メンバ関数を利用して、UTF-16にエンコードされます。さらにfromUtf16(xxx).toUtf8という記述であるため、UTF-16になった文字列が、UTF-8に変換された値がemplace_backの引数となるため、結局はargvUTF16から取り出された引数のargがUTF-8になってargvUTF8QというQByteArray型にテンプレート化されたvector型の値として、UTF-8形式の文字列を最後尾に持つようになります。
  
  
 ややこしかったかな?
+
 サンプルプログラムのくせに、Qtというライブラリを使ったサンプルで、ややこしかったかな?Qtで提供されている型以外の型でも動きます。Qtっていうライブラリが便利だよっていうことと、いろいろな型で動かせるよということを言いたかっただけです。
  
  

2021年2月12日 (金) 00:00時点における最新版



個人用ツール
名前空間

変種
操作
案内
ツールボックス