C++相談室 part164

■ このスレッドは過去ログ倉庫に格納されています
2023/05/09(火) 11:50:52.06ID:EYc2I7oW0
!extend:checked:vvvvv:1000:512
!extend:checked:vvvvv:1000:512
↑同じ内容を3行貼り付けること

次スレは>>980が立てること
無理なら細かく安価指定

※前スレ
C++相談室 part163
https://mevius.5ch.net/test/read.cgi/tech/1672409791/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
2023/07/01(土) 10:11:11.88ID:6RngsvF70
テキストエディタを自作すると一文字一文字の描画位置の計算を毎回しなければならず、結局全テキストをデータutf32形式で保持するのが楽という結論になりそう
2023/07/01(土) 10:21:22.63ID:zjPNSumQM
そこまでやるとワープロやDTPの範疇では?
370デフォルトの名無しさん (ササクッテロラ Sp5f-kcaK)
垢版 |
2023/07/01(土) 10:38:59.61ID:oFUv7PIMp
>>351
変換する処理ったって、普通static_castにコスト発生せんやろ
371デフォルトの名無しさん (ササクッテロラ Sp5f-kcaK)
垢版 |
2023/07/01(土) 10:41:23.25ID:oFUv7PIMp
static_castというよりstatic_cast相当というべきか
もちろん浮動小数点数と整数だと命令いるけど
2023/07/01(土) 10:43:45.44ID:hNdT1t6QM
レジスタの拡張命令が必要になる
それはゼロコストではない
2023/07/01(土) 10:45:55.45ID:hNdT1t6QM
8bit,16bitの値を同サイズのレジスタに読む
それを32bitへ拡張する
374デフォルトの名無しさん (ササクッテロラ Sp5f-kcaK)
垢版 |
2023/07/01(土) 10:49:09.01ID:UYNjOrxwp
そうなのか、知らんかった・・・
2023/07/01(土) 10:55:28.60ID:hNdT1t6QM
8bitしかないのに32bitで読むと当然ごみが入るので何かしないといけない
逆に8bitだけ読んで何もしないとこちらもレジスタにゴミが残ってる
何もしないで使える場合なにかしらの仕組みがある

そんなことするよりレジスタ拡張命令使った方がいい
通常の命令だけでなくてsimdにも用意されている
2023/07/01(土) 10:57:02.19ID:7zrd4+jP0
俺も >>367 の意見に賛成。
UTF-32 の採用で何もかも良くなるわけではないが
少なくともコードポイント単位での扱いは楽になる。
2023/07/01(土) 10:58:34.38ID:7zrd4+jP0
ちょうど Unicode 関連の本を読んでたんだが
右から左へ書く言語だとか
それが入れ子になってる場合だとか、
そういうのにちゃんと配慮したソフトウェアが世の中にあるのは
めちゃくちゃ頑張った人がいるんだなぁと有難みを感じてる。
378デフォルトの名無しさん (スププ Sd02-+VJx)
垢版 |
2023/07/01(土) 12:18:01.21ID:W7avfgkdd
日本語も右から左に書く言語だ
正確には上から下と右から左ニダ
2023/07/01(土) 12:20:52.99ID:86MprtLh0
BiDiモード
2023/07/01(土) 12:42:13.26ID:ZV4XYgX9M
世界でも珍しい縦書き文化
2023/07/01(土) 15:53:40.98ID:GgZZqhZy0
UTF32派の人ってWin32でW系API通す時に毎回変換するってこと?
2023/07/01(土) 16:08:08.30ID:7zrd4+jP0
>>381
そうだよ。
作るアプリケーションがエディタ (またはシーケンシャルではない
テキスト操作をする何か) であるという前提を置いているときなら
という条件付きな話だが。
2023/07/01(土) 17:26:11.76ID:6RngsvF70
そもそもWin32でA系APIにutf8渡せないし
384デフォルトの名無しさん (ワッチョイ 7b9c-44el)
垢版 |
2023/07/01(土) 17:29:40.49ID:ceIwatEY0
A系にはutf8渡せるんじゃないの?
2023/07/01(土) 17:36:11.93ID:6RngsvF70
渡せるという表現がまずかったかな
結果を気にしなければ、なんでも渡せるよ
2023/07/01(土) 17:43:00.61ID:XU86fDmw0
>>384
Windows バージョン 1903 (2019 年 5 月の更新プログラム) 以降、ActiveCodePage プロパティを使って、プロセスのコード ページとして UTF-8 を使うように強制できるようになりました。
2023/07/01(土) 19:58:04.79ID:Z2fZL/QQM
A系はASCIIなのでunicode由来のutfもshift-jis などのMBCSも扱えない
2023/07/01(土) 20:10:31.66ID:XU86fDmw0
>>387
最近までは、-A API がレガシと見なされていました。
これは、何十年もの間、Windows が "Unicode" -W バリアントを推進していたためです。
しかし、最近のリリースの Windows では、ANSI コード ページと -A API を活用し、
新しい SKU で UTF-8 サポートを導入しています。 ANSI コード ページが
UTF-8 に対して構成されている場合、-A API は UTF-8 で動作します。
2023/07/01(土) 20:13:40.75ID:6ckc7dLGd
>>387
以前からCP_ACPは日本語環境でシフトJISを扱えたはず。CP_ACPの解釈をCP_UTF8にすることができる設定と見なせる。
390デフォルトの名無しさん (ブーイモ MM8e-44el)
垢版 |
2023/07/01(土) 20:43:32.48ID:B2exONcuM
ASCIIしか考えてないアメリカ人の作ったプログラムでもUTF-8ならそれなりに動くよね
strlenが正確な文字数を返してくれるわけではないけども
2023/07/01(土) 20:55:13.36ID:6ckc7dLGd
WideCharToMultiByteとMultiByteToWideCharの第一引数に明示的にシフトJISのコードページ932を指定すればUTF-8な環境でも動く。
2023/07/01(土) 23:06:29.67ID:5I1AeY3j0
そうなの?
ただ単に変換APIの第一引数に明示的にシフトJISのコードページ932を指定しただけだと
とりわけWideCharToMultiByte()の場合、文字コードの自動判別が介在する余地もなく、
ウィンドーズ内部表現のUTF-16がシフトJISのコードページ932に(指定通りに)変換されるだけなんじゃないの……

M$のページ見たら
>マニフェストの ActiveCodePage プロパティを使って、プロセスのコード ページとして UTF-8 を使うように強制できるようになりました。
>マニフェストの ActiveCodePage プロパティを使って
と書いてあった
マニフェストファイル変えたら中で何がどう切り替わるのかわ皆目わからんが、
ただ単に変換APIの第一引数に明示的にシフトJISのコードページ932を指定したら万事OKというよりは得心が行く
2023/07/02(日) 00:11:45.31ID:26TSX02F0
そういう話じゃない
〜A系のAPIの文字列引数にUTF8が使えるようになったという話だ
2023/07/02(日) 00:28:14.28ID:MfIRncIE0
>>390
>strlenが正確な文字数を返してくれるわけではないけども
そもそも正確な文字数が必要な局面って?
そもそもUnicodeにおける「文字」って
2023/07/02(日) 00:43:33.66ID:B6PMzb/YM
A系ならstrlen、W系ならlstrlen使えば済む話では?
2023/07/02(日) 01:40:17.87ID:MfIRncIE0
>>377
Unicode自体と同様、文句もあるけど世界中が規格化標準化されるのはやはり
有益な面があるなあと思ったり
言語を完全に知らなくてもそういう規則に従えばまあまあのものが出来る
そうやって自分もRTLなテキストを処理するコードを書いたことがあるし
日本語を(も)扱うコードだってどこかの外人が書いてるわけで

そうだ、日本語だって戦前はRTL。あれ、英語はどうしてたんだろ.... 敵性言語だから
ないことになってたのかなw

そういえば、テキストだけじゃなくてUIのレイアウトも変わるし、テキストのスクロール
方向とかも変わるし、注意が必要だったり
397デフォルトの名無しさん (ワッチョイ cb02-ctHD)
垢版 |
2023/07/02(日) 04:10:12.63ID:3Rb9PhMu0
Visual C++してもいいでしょうか?
特定の既定のライブラリの無視に「LIBCMT.lib」を設定して
マルチスレッド使っても大丈夫でしょうか?
もちろんランタイムライブラリの設定はマルチスレッドにしてます。
これでマルチスレッド使っても大丈夫でしょうか?
3980397 (ワッチョイ cb02-ctHD)
垢版 |
2023/07/02(日) 04:46:51.92ID:3Rb9PhMu0
ごめんなさい。自己解決しました。
2023/07/02(日) 08:22:56.48ID:cqAPSm8d0
>>393
何言ってるかわからんkwsk
過去にCreateFile(L"漢字.txt", ...)で作ったファイルを、
WideCharToMultiByteとMultiByteToWideCharの第一引数に明示的にシフトJISのコードページ932を指定するだけで
CreateFileA(u8"漢字.txt", ...)で開けるようになったとしたら論理鉄器におかしい希ガス
400デフォルトの名無しさん (ワッチョイ c2fb-PY2F)
垢版 |
2023/07/02(日) 10:08:44.31ID:idCQJgQa0
環境依存の文字コードを取り扱うA系の関数でコードページ65001(UTF8)をサポートしたという話か?

「最近のリリースのWindows」とやらが何年ごろの話か知らんが
2023/07/02(日) 10:21:10.68ID:FpcWXL3uM
親切な人がいて上の方に書いてある
2023/07/02(日) 11:09:45.90ID:cqAPSm8d0
書いて無くね↑?
403デフォルトの名無しさん (スププ Sd02-+VJx)
垢版 |
2023/07/02(日) 11:52:22.93ID:R6FnNIs/d
>>396
英文モールスや和文モールス信号(符号)は戦前からあるから参考になるよ

みごとに被ってるから
2023/07/02(日) 11:59:53.95ID:BV1CApnra
>>399
お舞の方が何言ってるかワカラン
>過去にCreateFile(L"漢字.txt", ...)で作ったファイルを、
>WideCharToMultiByteとMultiByteToWideCharの第一引数に明示的にシフトJISのコードページ932を指定するだけで
>CreateFileA(u8"漢字.txt", ...)で開けるようになったとしたら論理鉄器におかしい希ガス

CreateFile と WideCharToMultiByte/MultiByteToWideChar には何の関係も無いぞ
どちらかといえば setlocale/systemlocale とかの話してるなら判らんでもないが
2023/07/02(日) 12:09:58.45ID:cqAPSm8d0
>>404
>>391
2023/07/02(日) 12:12:15.47ID:cqAPSm8d0
んまーもちついて>>391を読めば
>UTF-8な環境でも
というのがActiveCodePage プロパティを使って、プロセスのコード ページとして UTF-8 を使うように強制できるようになりました環境(>>386
の意味なら分からなくも無いorz
2023/07/02(日) 14:25:34.89ID:MfIRncIE0
>>403
>>396はエンコーディングの仕方の話ではないんですよね

疑問の答えはここにあった(と思う)
https://upload.wikimedia.org/wikipedia/commons/b/b3/Bank_of_Japan_silver_convertible_one_yen_banknote_1885.jpg
408デフォルトの名無しさん (アウアウウー Sabb-hiKC)
垢版 |
2023/07/02(日) 15:11:19.95ID:BV1CApnra
和氣清麻呂好き
409デフォルトの名無しさん (ササクッテロラ Sp5f-UEHP)
垢版 |
2023/07/03(月) 18:00:48.84ID:+/doOPQlp
組み込みの設計技法を学びたいんだけど、静的構造と動的構造の設計を学べるいい書物あったら教えてください
2023/07/05(水) 19:37:47.51ID:UfO9dhEIM
>>409
古い人間だから、デザインパターン本ぐらいしか知らん。

C++テンプレート設計の良本てあったっけ?
2023/07/05(水) 19:46:37.42ID:98uidMYlF
>>410
Modern C++ Designとか?
2023/07/05(水) 19:52:44.79ID:tRsu2qbd0
あれは魔術書過ぎてちょっと…C++03時代の本だから古いし
2023/07/05(水) 20:15:53.22ID:XE8fk1ziM
横からだけど組み込みは手続き型なのかイベントドリブンなのかも知らないので知りたいなw
2023/07/06(木) 03:34:48.12ID:s5S2CoPB0
組み込みだから手続き型とか
組み込みだからイベントドリブンとか
そういうのはないよ
2023/07/06(木) 09:09:22.20ID:a8qSLwwI0
>>413
組み込まれていれば組み込みなんだよ。
扱う技術には何も違いは無い。

組み込みなら何らかの制御対象はあるだろうから
その制御対象の性質には影響を受けると思うが。
2023/07/06(木) 09:59:15.82ID:ZkyJU/6U0
手続き型かどうかとイベントドリブンかどうかは関係ない概念
417デフォルトの名無しさん (ワッチョイ d701-kcaK)
垢版 |
2023/07/06(木) 14:16:15.16ID:ALXC3HlV0
>>412
横からだが魔術書とか、アンサイクロペディアの内容真に受けてるのか流行ってるのか知らんけど良くない
凝ったメタプログラミングとかしなくても、わりと実用的な知識が書いてあるよ
オブジェクト指向だけだとユーザーに制約を押し付けてしまいがちな部分を、もう少し自由度高く、直交する概念を組み合わせて小さなパーツに分けるのにテンプレートが便利だよとかいう話が書いてある
2023/07/06(木) 14:28:39.97ID:a0X6jP530
出版当時の衝撃は魔術と評されるに値したなぁ
今もって難解の書ではある
正座して読むべし
2023/07/06(木) 15:07:08.13ID:s5S2CoPB0
足が痺れて集中できない
2023/07/06(木) 20:08:43.89ID:3MFY2fBc0
>>417
いや読んだし持ってるし、面白くて良いことも色々書いてるのは知ってるよ
でも「設計技法の本だよ!」ってC++詳しくない人に薦めるような本ではない
2023/07/06(木) 21:07:53.32ID:a8qSLwwI0
C++03 と C++11 の間で大きな溝があるからなぁ。
言語を詳しく知った上でなら C++03 を前提として書かれた本でも
役に立つところを拾って読むということも出来るけど、
不慣れな内には薦められないというのはわかる。
2023/07/06(木) 21:11:56.86ID:s5S2CoPB0
メジャーチェンジの上って何て言うんだろう
グレートチェンジ?
423デフォルトの名無しさん (ワッチョイ d701-kcaK)
垢版 |
2023/07/06(木) 21:51:28.48ID:ALXC3HlV0
>>420
ああ質問者と勘違いしてた
ただ魔術書とか痛いし不正確な表現はよろしくない(実際Qiitaとかで価値の無い出典も示さないクソ記事書いてる奴がよく使ってる)と言いたいだけ
あと>>409が初心者かどうかはわからんぞ
424デフォルトの名無しさん (ワッチョイ d701-kcaK)
垢版 |
2023/07/06(木) 21:53:09.37ID:ALXC3HlV0
もちろん組み込み学ぶのに適した本だとは思わんけど
2023/07/06(木) 23:37:01.42ID:YLJUKdW5a
>>422
新装開店と言いつつ中身は実質閉店詐欺sale
2023/07/07(金) 00:10:58.87ID:EP1fLvq90
>>412
ほんそれ
積読のままになってる……
2023/07/07(金) 00:21:21.09ID:AhT1sfN50
C++なんてもう20年くらいまともに使ってないんだけど大きく変わってるの?
普段使いするような部分で変わったのってどんなのあるの?
2023/07/07(金) 00:32:21.86ID:7ps2WMbUM
new deleteしない
生のポインタを使わない
moveの意識
2023/07/07(金) 00:36:54.14ID:2SE8uAkh0
>>427
moveが一番大きいかな?
生ポインタは20年前でも使わない人は使わなかった
2023/07/07(金) 01:56:31.07ID:gGTaLgTI0
俺もムーブ (というかその前提である右辺値参照も) の存在が大きな差だと思う。
今となっては C++03 では右辺値参照なしでやってたってのが信じられんくらいだ。
2023/07/07(金) 13:56:40.22ID:/sgbjnHO0
右辺値参照とmoveでパラメータや戻り値などにclassのインスタンスを直接使いやすくなって、設計の自由度と安全性が格段に向上したとは思うけど、
その代わり、演算子のオーバーロード時のconstやexplicitの有無など、型推論の仕組みをきちんと理解して適切に記述しないとtemplateで訳わかんないエラーが出て、
初心者殺し度も格段に向上したよねw
2023/07/07(金) 14:27:35.57ID:tybFBPle0
まさに今20年前のコードメンテしてるからnew delete使ってるよ
C++のランタイムすらリンクしてないからこれnewした時Win32APIの何が呼ばれてるんだろう?HeapAllocだったかな?
433デフォルトの名無しさん (スプッッ Sd22-yGZL)
垢版 |
2023/07/07(金) 14:38:08.14ID:5UFmRPYBd
スタティックライブラリがリンクされてるんでしょ
ランダム使用時と完全に同じとは行かないけどほぼ同等の処理のはずだけど
434デフォルトの名無しさん (スプッッ Sd22-yGZL)
垢版 |
2023/07/07(金) 14:38:34.18ID:5UFmRPYBd
ランダムじゃなくてランタイム
435デフォルトの名無しさん (ワッチョイ ffb9-BMDt)
垢版 |
2023/07/08(土) 09:03:38.78ID:Iqj4gtss0
g++でVLAを使ってるんですが、宣言時に初期化リスト使うのって未定義ですか?
公式のドキュメントを漁ってるんですが見当たらないので(英語苦手なので見落としてたらすみません)
2023/07/08(土) 09:37:22.13ID:E0cUKLNxd
C++にはそもそもVLAないぞ
非標準で実装されるケースはありうるけどね
2023/07/08(土) 09:56:47.19ID:svQTfB7/0
>>435-436
C と同等の VLA を使えるように拡張されている旨はちゃんとドキュメントに書かれてる。
しかし C の VLA では初期化子を書けないことになってる。
2023/07/08(土) 10:03:16.21ID:svQTfB7/0
GCC の具体的なドキュメントとしてはここ。
https://gcc.gnu.org/onlinedocs/gcc/Variable-Length.html

> Variable-length automatic arrays are allowed in ISO C99, and as an extension GCC accepts them in C90 mode and in C++.
439デフォルトの名無しさん (ワッチョイ ffb9-BMDt)
垢版 |
2023/07/08(土) 10:10:11.44ID:Iqj4gtss0
>>436
はい、処理系依存ということは認識してます
>>437,438
ありがとうございます!
2023/07/08(土) 11:40:41.01ID:hU6KuhT00
コンテナ使えばVLAって最早必要ないような...
2023/07/08(土) 12:00:36.50ID:p+sO9/0DM
数年前にc++でありながらvectorすらない実装はあったけど
2023/07/08(土) 13:06:37.75ID:E0cUKLNxd
>>440
禿同
443デフォルトの名無しさん (ササクッテロラ Sp0b-/+4S)
垢版 |
2023/07/08(土) 15:36:54.89ID:lxagCGE0p
CのVLAってスタック使われることもあるんじゃなかったっけか
2023/07/08(土) 15:51:02.79ID:Wmg0D33kM
コンパイラによる
2023/07/08(土) 18:03:19.11ID:svQTfB7/0
どうしても VLA が必要だとしたら
そもそもヒープアロケーションのコードを書いてるときとか、
変則的なアーキテクチャで仕方がないとか、
C++ の言語機能が完全には使えない状況かな。

あるいはヒープアロケーションのコストを許容できないほど速度的に厳しいとか。
2023/07/08(土) 20:31:31.43ID:svQTfB7/0
話をぶった切る上に去年の話でアレなんだがこの件。
https://mevius.5ch.net/test/read.cgi/tech/1653135809/734
なんの気なしにログを見返してて思い出した。
unexec だ。
2023/07/08(土) 20:45:51.68ID:wtJKE3gc0
もうアセンブラかVerilog使えって感じだな
2023/07/08(土) 21:25:24.78ID:lX93SXsZ0
世の中には動的確保のコスト計算できない人が多すぎるんだ
2023/07/08(土) 22:15:45.40ID:gvv7KDv40
>>433
ちゃうちゃう、 new deleteのソースアセンブラに吐かせたの見たらGlobalAlloc GlobalFree使ってるわ
さすがにGMEM_FIXEDだったけど
2023/07/09(日) 04:19:53.74ID:MkrAlSpi0
Windowsのメモリアロケータってクソだよな
2023/07/09(日) 05:38:04.63ID:4tVwl4EYM
せやろか
2023/07/09(日) 05:40:32.30ID:DZU7rHSU0
Win16からの色々を引きずってるってこと?
2023/07/09(日) 05:53:12.10ID:xZgYfcZXM
引きずっているのはLocalAlloc
2023/07/09(日) 07:55:31.77ID:wAJ5czLTM
なんとなくメジャーなものをけなして気持ちがよくなってるんだろ
楽だよなそういうので気持ちよくなれる人は
2023/07/09(日) 09:27:34.88ID:MkrAlSpi0
メジャーだからって完璧に出来ているとは思わない方がいい
2023/07/09(日) 09:33:30.46ID:DZU7rHSU0
反体制派な俺すげーだろって痛すぎる厨二病は昔からいるよね
2023/07/09(日) 09:36:52.25ID:IdmutbDk0
具体的にどういう場面で問題があるのか、可能ならサンプルコードなどを添えて指摘してくれないと、同意しようがないよね
2023/07/09(日) 10:14:00.41ID:+WiQ27SB0
そりゃ様々な用途や優先すべき軸がある中で汎用的にあらゆる用途に高性能であれと言われたら
中庸にするか尖らせて特定用途で使い物にならなくなるかの二択になるよね
2023/07/09(日) 10:40:38.50ID:ihdHNtRI0
EXEで確保したしたメモリーブロックをdllで解放するときに(そんなことをするなというのはさておき
むしろmalloc()だとリンクするCRTのバージョン相違でトラブルになりかねないから
OSがmalloc()的なことまでしてくれるのは良い事な希ガス知らんけど
2023/07/09(日) 10:57:36.03ID:6ZzBc/+b0
C++ なら operator new のオーバーロードなんかも出来るわけだし
コンテナ類もアロケータを差し込むことが出来るわけで
メモリアロケーションに関して過剰なほどのカスタマイズ性がある。

もちろん提供されるアロケータで性能が足りるならそれに越したことは無いが、
足りないときでもなんとかできる可能性があるってのは C++ のいいところだよ。
2023/07/09(日) 11:09:45.90ID:ihdHNtRI0
前なんかstd::vector<T>をdllに渡したら(コピー渡ししたら)クラッシュするトラブルに遭遇して
原因はC++のランタイムのバージョン相違やったorz
2023/07/09(日) 11:44:01.32ID:6ZzBc/+b0
DLL を跨ぐときは生配列が結局は楽かなぁ。
他環境に移植する予定がないなら COM の流儀に従って SAFEARRAY とか。
463デフォルトの名無しさん (ワッチョイ d701-/+4S)
垢版 |
2023/07/09(日) 21:30:46.83ID:Y+7J8yUt0
アロケータを指定するときってのは性能どうこうではなく環境や設計上の理由が主だよ
それよりpolymorphic_allocatorはなんでコンテナのコピー時にget_default_resourceを返すんだマジで
2023/07/09(日) 21:44:31.99ID:r53YpIy/0
10年くらい前だけど6コア(12スレッド) x 双頭のマシンで
Debianのlibcのmallocをjemallocに置き換えたら
かなり速くなって感動したなぁ
いまのglibcのmallocはどうなんだろ?
2023/07/15(土) 10:34:20.34ID:/MZbR2lO0
最近クラス作るのが面倒な時thread_localのstd::vectorよく使うんだけど
何か問題起きたりする?
2023/07/15(土) 11:05:18.52ID:08dxROCJ0
問題を検証するコードを書いて実験してみれよ
一日で組めるだろ
2023/07/15(土) 12:21:20.90ID:lF+Fe8GnM
>>466
それ悪魔の証明
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況