[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2ch.scのread.cgiへ]
Update time : 02/25 20:53 / Filesize : 288 KB / Number-of Response : 1016
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

C++相談室 part151



1 名前:デフォルトの名無しさん mailto:sage [2020/05/14(木) 11:53:25.59 ID:ZPCfyTux.net]
C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレにお願いします。

前スレ
C++相談室 part150
https://mevius.5ch.net/test/read.cgi/tech/1584975873/
このスレもよろしくね。
【初心者歓迎】C/C++室 Ver.105【環境依存OK】
mevius.5ch.net/test/read.cgi/tech/1556142878/

■長いソースを貼るときはここへ。■
 codepad.org/
 https://ideone.com/

[C++ FAQ]
https://isocpp.org/wiki/faq/
www.bohyoh.com/CandCPP/FAQ/ (日本語)

テンプレここまで

263 名前:865 mailto:sage [2020/06/09(火) 09:27:54.99 ID:cTF8gHLn.net]
前提にしているのがどんなOSであろうと
C++的には環境依存な話だね

264 名前:デフォルトの名無しさん mailto:sage [2020/06/09(火) 15:37:05.70 ID:FUnSNOef.net]
要素はintと任意オブジェ
int値を渡すと
論理和がゼロ以外の要素を
返すコンテナってないですか?

265 名前:デフォルトの名無しさん mailto:sage [2020/06/09(火) 16:12:25.38 ID:SETbyCsO.net]
>>257
もし、CTRL+Sを処理するイベントハンドラの中で、単純に CloseHandle()を自分で呼び出して
失敗した場合であれば、保存に失敗した事をAfxMessageBox()で知らせた後、なんとか今までの
メモリ中のデータだけは壊さずに処理できればベスト。

しかし、他の何らかの例外が発生した時に、RAIIによって自動的に呼び出されたデストラクタの中で
CloseHandle()に失敗した場合には、対処が難しそう。
テストも難しいし、余りそういう状況は起きないので優先順位は低いが。

266 名前:デフォルトの名無しさん mailto:sage [2020/06/09(火) 17:15:04.89 ID:nNNGB7r+.net]
>>261
std::pair<int, SomeObj> を格納するコンテナと
「int部分とある値とのビットORを結果とする述語」を
std::copy_if() に渡すような話かな。

「任意オブジェ」部分が要素ごとに異なる、だと難問な気がするけど。

267 名前:デフォルトの名無しさん mailto:sage [2020/06/09(火) 17:30:16 ID:n28tZ6EV.net]
論理積ではなく?

268 名前:デフォルトの名無しさん mailto:sage [2020/06/09(火) 17:42:20.88 ID:nNNGB7r+.net]
確かに論理和だと「つまらない」結果になりそうね。
普通の使い方なら論理積で抽出か。

排他的論理和は「もっと面白い」かも知れんけど。

269 名前:デフォルトの名無しさん mailto:sage [2020/06/09(火) 22:35:23.41 ID:FUnSNOef.net]
>>263
それで組んでみます
ありがとうございました
あと実際は論理積です

270 名前:デフォルトの名無しさん mailto:sage [2020/06/10(水) 05:39:12.94 ID:67cF/bBY.net]
>>257
「ログファイルなので書込みに失敗しても大勢に影響が無い」とか
「作業用ファイルfは書いた後必ず誰かがリードオープンするから書込みに失敗していたらそこでワカルから書込みのエラーチェックを省略する」
みたいな判断はアプリの設計としてはアリかもしれないが、CMyHandleみたいな汎用部品的に使われ得る低水準クラスではナシ
これをアリだと思う香具師はお気楽すぐる、

271 名前: mailto:sage [2020/06/10(水) 05:44:30.52 ID:OTs8rmHM.net]
>>267
でも >>257 の CloseHandle() や fclose() が失敗したからといって、何か手が打てるのですか?
何もできないのでは?
もしかして黙って exit() するのですか?



272 名前:デフォルトの名無しさん mailto:sage [2020/06/10(水) 07:23:10 ID:itI4VuCe.net]
てか、自動解放するクラス作っても手動解放する手段残しておけば、使う側で特別な処理は出来るんだよね

273 名前:デフォルトの名無しさん mailto:sage [2020/06/10(水) 08:13:57 ID:V+CQutVh.net]
C++ではexitをD組にして欲しい

274 名前:デフォルトの名無しさん mailto:sage [2020/06/10(水) 12:31:11 ID:BPKUZfdj.net]
>>268 通知は欲しいかな。
黙って動作が続くくよりは terminate() のほうがマシだとも思うし。汎用部品ならなおさら。

破棄失敗する可能性のあるリソースの RAII wrapper にはエラー通知できる
close() なりの破棄操作を別に用意しておけという話で済むと思う。

275 名前: mailto:sage [2020/06/10(水) 21:10:53.11 ID:OTs8rmHM.net]
>>271
通知って簡単にいいますけれども、その例えば fclose() 失敗の通知をどこに送り、そして送った先では何をするのですか?
通知をもらって何か手を打てるのですか?

汎用部品/ライブラリの作法ですか
理解はできますが、しかし、何もできないのなら、あるいは何もできないことがわかっているのなら、特段の失着にはみえませんね…

276 名前:デフォルトの名無しさん mailto:sage [2020/06/10(水) 21:56:31.91 ID:yfneRFZn.net]
大事なデータを保存したファイルのfclose()が失敗したらどうするかって?
場所変えて保存を試みるに決まってるだろ
それくらいしないプログラムは売り物にならないぞ

277 名前:デフォルトの名無しさん mailto:sage [2020/06/10(水) 22:20:00 ID:yQDU6thd.net]
そもそも仕様で指定があるならそのように書くだけなんじゃ

278 名前:デフォルトの名無しさん mailto:sage [2020/06/11(Thu) 00:27:51 ID:flOLYJrB.net]
>>272
たとえばコンソールアプリなら標準エラーに情報を出したうえで終了コードに反映して、
コマンドが失敗したのを見たユーザーが何をするか考えるっていうのはごく当たり前のことでしょ。
たとえばストレージ容量が足りないとして失敗したなら容量を確保して再実行すればいい。

fclose() の戻り値を捨ててるプログラムは現実としてたぶん多いんだけど、
そんなソフトがたとえばサーバー内でストレージ容量不足を数か月にわたって闇に葬り続け、
何かおかしいと気付いたサーバー管理者が自動スクリプトを緻密にトレースした結果、
保存されているはずの情報がもはやどこにも存在しないと気付いた時の怒り憎しみ悲しみを想像されたい。

少なくとも成功したと誤解しないのが重要。

279 名前:デフォルトの名無しさん [2020/06/11(Thu) 06:18:34 ID:m7gaY4Qp.net]
そんな状況じゃopenも失敗してるだろうな

280 名前:デフォルトの名無しさん mailto:sage [2020/06/11(木) 09:58:48.19 ID:Th6rh/3U.net]
>>275
実はそれがRAIIの限界なんだよ。

ちゃんと明示的に fclose() してその戻り値をチェックするのが一番安全。
例外安全性のためにRAIIを使うべきという人が居るけど、それで勝手に
デストラクタ内でfclose()して容量不足やディスクエラーで書き込み失敗した時には、
多くの場合、対処に困る。
でも、例外安全のためにはそうせざるを得ないかも知れない。
ということは、そもそも論になり、例外の throw、catch機構自体が安全に扱うのが
難しいという結論に至り、議論百出する。

281 名前:デフォルトの名無しさん mailto:sage [2020/06/11(Thu) 10:29:20 ID:flOLYJrB.net]
>>277
それは飛躍しすぎかな。
破棄が失敗する可能性のあるリソースの RAII ラッパーが破棄操作も提供すれば済む話でしょ。
std::fstream の close() みたいに。



282 名前:デフォルトの名無しさん mailto:sage [2020/06/11(木) 10:38:30.62 ID:3eiGl155.net]
上から目線なくせに脇が甘いな

283 名前:はちみつ餃子 mailto:sage [2020/06/11(木) 11:08:58.38 ID:7wv0rqaB.net]
デストラクタ内でエラーが発生する可能性があってそれに対処が必要なら
例外の送出とか言ってないでデストラクタ内で対処してしまえよ。
汎用的な部品にし難いのはしゃーないやろ。
実際に汎用的ではないんだから。

284 名前:デフォルトの名無しさん [2020/06/11(木) 11:47:39.02 ID:DcPEy/qZ.net]
おまいら (f)printf() の戻り値もちゃんと毎回観てるか?

285 名前:デフォルトの名無しさん mailto:sage [2020/06/11(木) 11:54:46.87 ID:Th6rh/3U.net]
>>280
そうじゃなくて、何らかの別の事情で例外が送出された時に、fclose()し忘れを
防ぐためにRAIIのテクニックを使う場合の話をしてる。

286 名前:デフォルトの名無しさん mailto:swage [2020/06/11(木) 11:56:16.72 ID:Th6rh/3U.net]
>>278
fstreamであろうがなんであろうが、GUIアプリに置いて、デストラクタ内で失敗した
時にユーザーに失敗したことを知らせるのは結構難しいぞ。

287 名前:デフォルトの名無しさん mailto:sage [2020/06/11(Thu) 12:17:49 ID:3eiGl155.net]
そんなに難しいか?
深刻な事態が疑われるならシステムモーダルダイアログなり何なりすることあるだろ
あくまでOSではなくアプリとして事後条件が保証できない場合はterminateを呼び出して
OSに事故としての扱いをさせるのが「難しい」のは思いつかないだけじゃねえだろな

プログラミング以外の仕事でも事故はまず報連相
1人で握りつぶそうとするのは学生気分が抜けてないやつのすることだ

288 名前:デフォルトの名無しさん mailto:sage [2020/06/11(Thu) 12:19:04 ID:flOLYJrB.net]
>>283
そりゃ難しいだろうな。
通知が要るならデストラクタ内で失敗させないように破棄操作を提供すれば済むだろうという話をしたつもり。
それで済まないケースを想定してるなら、どんなのか教えて。

289 名前:デフォルトの名無しさん mailto:sage [2020/06/11(Thu) 12:21:07 ID:flOLYJrB.net]
>>284 そっか GUI ならダイアログ使えるから、通知するだけなら簡単だね。

290 名前:デフォルトの名無しさん mailto:sage [2020/06/11(Thu) 12:22:43 ID:Th6rh/3U.net]
>>285
>通知が要るならデストラクタ内で失敗させないように破棄操作を提供すれば済むだろうという話をしたつもり。
意味が分からないので、説明を。

291 名前:デフォルトの名無しさん mailto:sage [2020/06/11(木) 12:29:07.29 ID:Th6rh/3U.net]
>>284
Exceptionをthrowした時の自動フォローアップとしてRAIIのデストラクタが呼び出される。
それが呼び出されるのは原則的にどこかでかは余り仮定できない。
ということは、非常に変なタイミングで fclose()に失敗することがある。
メッセージボックスを出すと、そこでイベントに対するメッセージループが形成されるので、
タイマーイベントのハンドラのOnTimer()などが起動してしまうこともある。
OnTimer()を、Exceptionがthrowされた状態で実行してよいかどうかは注意を要する事だ。
また、アプリの初期化処理の InitInstance()や終了処理のExitInstance()の中で、RAIIの
デストラクタが呼び出されてしまう場合もあるかも知れず、その中でメッセージボックスを
出すと思わぬ問題が生じるかもしれない。
生じないかも知れないが。

ただ、Exceptionがthrowされたということは何か異常が生じているということで、
それがたまたまファイルに関するものであったとしたら、二重三重に、ファイル関連で
エラーが生じてしまい、何か危険な状態に陥ってしまう可能性も有るかも知れない。
そういう微妙な配慮が必要となる。



292 名前:デフォルトの名無しさん mailto:sage [2020/06/11(木) 12:33:42.17 ID:Th6rh/3U.net]
>>288
もっといえば、Exceptionのthrowはどこで起きるかは仮定しにくいものなので、
何らかのダイアログを出すための初期化処理の中で生じることも有るかも知れない。
そういう場合にたまたま、関数の呼びだし元へ どんどん Exception の Unwinding
が生じて、RAIIのデストラクタで fclose()が呼び出される可能性も有るかも知れない。
そうなって、さらに、その fclose()がエラー終了する場合がある。
ダイアログの生成に失敗したタイミングで、エラーメッセージの表示のために、
メッセージボックスのダイアログを出すことになれば、もしかしたらかなり危険な
バグを含むことになってしまうかも知れない。

293 名前:デフォルトの名無しさん mailto:sage [2020/06/11(木) 12:49:26.16 ID:flOLYJrB.net]
>>287-289
ごめん、別の例外でスタック巻き戻し中の fclose() 失敗は無視でもいい想定だった。
元の例外が通知されればそれでいいだろうと。
破棄操作を提供すれば済むっていうのは、たとえば fstream について
正常フローから close() 呼び出せば fclose() の失敗は普通に処理できるっていう意味。

エラー発生後の後処理でのエラーについてはもはや例外処理機構とか RAII とか関係なく
エラー処理一般で難しさは変わらないのでは?

294 名前:デフォルトの名無しさん mailto:sage [2020/06/11(木) 13:14:41.21 ID:4Jo+eUkD.net]
>>288
何を言い出すかと思ったらシングルスレッドを
気分だけマルチっぽく見せかけてるだけなやつの話か

295 名前:デフォルトの名無しさん mailto:sage [2020/06/11(Thu) 17:56:16 ID:+WuQ8P1K.net]
そんなに大事なデータならverifyするだろ

296 名前:デフォルトの名無しさん mailto:sage [2020/06/13(土) 16:05:30.52 ID:ifM7/RIh.net]
>>272
>知って簡単にいいますけれども、その例えば fclose() 失敗の通知をどこに送り、そして送った先では何をするのですか?
最終的にはユーザーに通知する

>通知をもらって何か手を打てるのですか?
ユーザーが通知に従い手を打てる

>>280
デストラクタ内での例外を送出したら即アプリが死ぬハズ
コアを吐いてくれたら通知にあたる情報が取り出せるかもしれないが美しくない

>>288
異常の内容をユーザーに通知することを目的とするなら
>エラーの通知先オブジェクトへのポインタをCMyXは持つ(>>253)
で事足りる
メッセージループは、通知先オブジェクトが1個だけもちさえすればユーザーへの通知の役目を果たせる
CMyXのようなケースは通知先オブジェクトを保持するオブジェクトからFactoryMethodパターンでインスタンス化
するのがいかにもOOP的で個人的には好み(CMyXのインスタンス化のときに通知先を確実に渡せる

297 名前:はちみつ餃子 mailto:sage [2020/06/13(土) 16:59:34.64 ID:1nypd8FJ.net]
>>293
私が書いた >>280 ではデストラクタ内で対処を完結させろ (例外を投げずに済ますために) と書いてあるつもりなんだが、お前にはそれが読み取れなかったか?

ちなみに、現在の C++ ではデストラクタ (と delete) はデフォルトで noexcept で修飾されているものと見なされる。
これは例外を外へ送出しないことを保障するんだが、内部で例外が発生しないとは保証されない。
もし発生した例外を内部でキャッチせずに外へ出ていこうとしたら std::terminate() が呼び出される。
(スタックの巻き戻しは起こらずに即死するかもしれない。)

陽に noexcept(false) を指定したらデストラクタから例外を送出することは可能。
ただし、スタックの巻き戻し中に起動される別のデストラクタから例外が送出されると死ぬ。
普通は色々なライブラリを組み合わせるから問題が出ないようにするには
一貫してデストラクタからは例外を投げないのが妥当な設計だと考えられているってだけ。

298 名前:デフォルトの名無しさん mailto:sage [2020/06/13(土) 17:06:07.88 ID:ifM7/RIh.net]
>>294
よく読んでなかったわサーセンwwwwwwwwwwww

>>293ので
>デストラクタ内で対処を完結させろ (例外を投げずに済ますために)
のアッパーコンパチになるのだから結果オーライで
オール無問題、

299 名前:デフォルトの名無しさん [2020/06/13(土) 20:11:16.15 ID:K/U+GWpl.net]
個人でc++使うことは少ないですか?
C#やelectronと比べて何倍手間がかかりますか?
2dのタイルマップエディタのようなものを作りたいのです、、、
https://www.mapeditor.org/

300 名前:デフォルトの名無しさん mailto:sage [2020/06/13(土) 20:19:12.06 ID:lPN2rvMv.net]
挫折するリスクも加味すると100倍くらいじゃないかな

301 名前:デフォルトの名無しさん mailto:sage [2020/06/13(土) 20:42:52.21 ID:AVSH26bs.net]
>>296
個人の場合、実はC++は適している。
むしろ、大人数の場合、いろいろなレベルの人がいるので速度を落としてでも、
誰でも使えるような言語を使おうとする企業が多い。
ちゃんとしたものを作りたかったら、C++は最良の選択。



302 名前:デフォルトの名無しさん mailto:sage [2020/06/13(土) 20:55:51.74 ID:AVSH26bs.net]
ところで、全く関係ないけど、昔は、
標準変換(Standard Conversions)の1つに、
「Reference Conversions(参照変換)」
という項目があったのに、C++17では、Overload Resolution関連で
「Reference Binding(参照束縛)」
という項目だけになってしまった、という認識であってますかね?
もしかしたら古すぎて、もう分からないかな。

303 名前:デフォルトの名無しさん mailto:sage [2020/06/13(土) 21:10:55.91 ID:XHF92Eb6.net]
c++がどうこういうこと自体無意味な気分。
OSとコンパイラのバージョン指定でもせん限り、特定の議論にもなりゃしない。

304 名前:デフォルトの名無しさん mailto:sage [2020/06/13(土) 22:13:05.14 ID:rMzKFBuy.net]
これから始めようと思うのですが
C++とC♯の大きな違いは何ですか
どっちから先の方が良いですか?

305 名前:デフォルトの名無しさん mailto:sage [2020/06/13(土) 23:19:47 ID:B/JuT+NG.net]
何作りたいかによるとしか言いようがない

306 名前:デフォルトの名無しさん [2020/06/13(土) 23:29:25.22 ID:dAI/jSW6.net]
あーじゃあ、C++には何が出来なかったせいで
後からC♯が作られたの?

307 名前:デフォルトの名無しさん mailto:sage [2020/06/14(日) 00:35:35 ID:0sKu6MyV.net]
違うよ

308 名前:デフォルトの名無しさん mailto:sage [2020/06/14(日) 00:45:05 ID:lm4ZS132.net]
んーでは、C++が劣っていてC♯が作られた理由は?

309 名前:デフォルトの名無しさん mailto:sage [2020/06/14(日) 00:55:29 ID:7AEk3bXh.net]
インタープリ夛ー

310 名前:デフォルトの名無しさん mailto:sage [2020/06/14(日) 00:58:40.28 ID:g+gmh/oa.net]
Javaの代わりが欲しかっただけであって優劣の問題はあまり関係がない
が結局Javaの領域には食い込めず、スクリプト言語の代わりになった
自由度を奪う代わりに楽に書けるみたいな
結局自由度が必要なのでC++から離れられないので余計書くのがつらい仕様になった
Win32APIのインクルードくらいSDKにまとめとけやPinヴォケって感じ

311 名前:デフォルトの名無しさん mailto:sage [2020/06/14(日) 01:08:08.89 ID:7AEk3bXh.net]
インタープリティアひとつつくっておけば色々な環境に使い回せるし版権問題にうるさいJavaをぶっつぶすため



312 名前:デフォルトの名無しさん mailto:sage [2020/06/14(日) ]
[ここ壊れてます]

313 名前: 01:08:40.52 ID:lm4ZS132.net mailto: >>307
> Javaの代わりが…スクリプト言語の代わりになった

なるほどぉ、それでunityのスクリプトになってるのか、
C++の自由度って具体的には何を指すんですか?
[]
[ここ壊れてます]

314 名前:デフォルトの名無しさん mailto:sage [2020/06/14(日) 01:17:15.70 ID:7AEk3bXh.net]
常識だろjk

315 名前:デフォルトの名無しさん [2020/06/14(日) 01:21:41.82 ID:iYtMGgBJ.net]
C++はアルゴリズムの部品化が一般的になっているので、自由に組み合わせられるところが、良いと思います。

316 名前:はちみつ餃子 mailto:sage [2020/06/14(日) 01:33:23.99 ID:MJZpLG29.net]
>>309
やりたければメモリのどこにでもアクセスできるってのが特に重要な違いかな。
デタラメなアクセスをしても実行時エラーとして検出されるとは限らない。

プログラマがメカニズムを理解して正しくプログラムを書けるなら (監視して実行時エラーを検出するための) 保護機構は無駄で、
余計なものがある分だけ実行速度が落ちるから無い方がいい。
それが C++ の基本思想であるゼロオーバヘッドの原則。

でも現実はそうではない。 (プログラマは間違う。)

317 名前:デフォルトの名無しさん mailto:sage [2020/06/14(日) 01:35:24.50 ID:lm4ZS132.net]
C++で出来るんならいったい、C++の何が悪くてC♯が産まれたのやら
さっぱりですね、
Wikipedia見にいったらc#はBoolean型とスイッチケースでストリング型が使えるそうなので
c#にしようと思います
お邪魔しましたわ、ありがとうございました。

318 名前:デフォルトの名無しさん mailto:sage [2020/06/14(日) 01:41:28 ID:9pT3ELpf.net]
c#を選択するのは悪くないと思うが、そこじゃないだろ

319 名前:デフォルトの名無しさん mailto:sage [2020/06/14(日) 01:45:14 ID:lm4ZS132.net]
あーうーん、自然言語処理とかネットのデータベースで
文字列比較を多用しそうな予定は未定なので・・

320 名前:デフォルトの名無しさん mailto:sage [2020/06/14(日) 02:22:12 ID:6myF93T5.net]
>>299
MSDNのC++の仕様書を見ると、まだちゃんと Reference Conversionsの
項目があった。
C++17には無い項目だ。

321 名前:デフォルトの名無しさん mailto:sage [2020/06/14(日) 03:45:35.31 ID:PNQfdADa.net]
文字列処理がメインで速度求めないならpythonとかの方がいいと思うぞ



322 名前:デフォルトの名無しさん mailto:sage [2020/06/14(日) 03:48:19.28 ID:kJWeEmyo.net]
>>313
>C++で出来るんならいったい、C++の何が悪くてC♯が産まれたのやら
>さっぱりですね、
基本的に、Cの時代からポインタが理解できない人が多かった。
ポインタが理解できて無い人でも、コピペしたりすればC++も使えたかも知れないが、
ちゃんと理解できて無いので、理解できている人に比べてメモリーの解放を間違ってしまう頻度が高い。
そのため、ポインタが出てこないVBを使う人が多かった。
VBしか使えなかった人でもが使えるようにした上で、見かけ上の文法と言語の名称をC++に似せることによって
今までC++を使えずに肩身の狭い思いをしてきた人に希望の光を与えることに成功したのがC#。

323 名前:デフォルトの名無しさん mailto:sage [2020/06/14(日) 03:50:45 ID:kJWeEmyo.net]
VB、VBと馬鹿にされてきた恨みつらみの反動で、C++は古いということにして、
新しいC#に適用できない老人が使う言語、という印象操作をする運動が
繰り広げられている。

324 名前:デフォルトの名無しさん mailto:sage [2020/06/14(日) 04:05:18.35 ID:kJWeEmyo.net]
彼らの脳内では、なんとかしてC#の人気を出すことによって、
C++使いを減らしていけば、もう二度とVB、VBと馬鹿にされた暗黒時代に
戻ることがなくなると予定されている。

325 名前:デフォルトの名無しさん mailto:sage [2020/06/14(日) 04:15:32.10 ID:Lj4n2emQ.net]
>>317
ありがとう、PerlやRubyも考えたんですが
文字列処理ってもコエカタマリン的な利用でDirectXが・・

326 名前:デフォルトの名無しさん mailto:sage [2020/06/14(日) 04:43:58.99 ID:kJWeEmyo.net]
C#はC++は、現実にかなり遅い。
それはそれぞれを使って作成されたアプリを比較してみれば分かる。
よく分かる例としてはVSだ。C++製のVSは高速だったが、C#製のVSは劇遅。
もう一つは、FrontPageとExpressionWeb 4。
開発に使われている言語以外はほぼ同じアプリだが、C++製の前者に比べて
C#製の後者は劇遅。

327 名前:デフォルトの名無しさん [2020/06/14(日) 04:59:16.97 ID:VVffaeyk.net]
>>298
手間がかかりすぎると聞きますがどうなのでしょうか

328 名前:デフォルトの名無しさん mailto:sage [2020/06/14(日) 05:00:21.83 ID:Lj4n2emQ.net]
それは.netフレームワークとかSilverlightの違いですか?WPF?でしたか?
Win XPとVistaの違いなようなDirectX使うか使わないかというかGUI処理ありきで画面とロジックを分けたゆえのXMLパーサーの重さなのか
グラボやドライバーがネックなような・・・

329 名前:デフォルトの名無しさん mailto:sage [2020/06/14(日) 05:03:18.92 ID:fGEYrFA/.net]
俺も297と同意見

330 名前:デフォルトの名無しさん mailto:sage [2020/06/14(日) 05:09:24 ID:kJWeEmyo.net]
>>323
MFCがGUI関連が弱いという問題はあるが、C++自体は、手間はそんなにかからない。
そんなに難しいわけでもない。
ちゃんとC言語のポインタ周りを勉強して理解することが大切で、
それさえ分かってしまえば、C++はCよりも開発効率がかなり高いし、安全。
メモリの解放の純粋なC言語では手間がかかったが、C++だとデストラクタが
発明されたことにより楽になり、そんなに危険度は高くない。

331 名前:デフォルトの名無しさん mailto:sage [2020/06/14(日) 05:18:18.18 ID:fGEYrFA/.net]
Cでexitを安易に使う癖がついているやつには陰険な罠がデストラクタにはあるわけだが



332 名前:デフォルトの名無しさん mailto:sage [2020/06/14(日) 05:29:57 ID:qmm3PCBI.net]
>>321
文字列処理なら、可読性が高い、Ruby 一択!

Perl は、意味の分からない暗号だらけで、ややこし過ぎる

333 名前:デフォルトの名無しさん mailto:sage [2020/06/14(日) 05:35:47 ID:qmm3PCBI.net]
>>296
Electron も良いけど、Ruby on Rails も良い

ただし、Rails でも、GUI は、HTML, CSS/SASS, JavaScript, jQuery, Bootstrap。
または、React

334 名前:デフォルトの名無しさん [2020/06/14(日) 05:38:37 ID:VVffaeyk.net]
>>329
例えばウディタはC++で作成されているようです
3dでもないのにC++?と思ってしまうんですが、何らかのメリットがあるのでしょうか?

335 名前:デフォルトの名無しさん mailto:sage [2020/06/14(日) 06:18:58 ID:kJWeEmyo.net]
>>330
まず、Electronは配布ファイルのサイズが数百MBあるので、それだけでも
プログラムの品質が下がる。
Rubyは、GUIに弱い。

C#は悪く無いとする人が多いが現実の本格的なアプリの例では遅いことが多い。

336 名前:デフォルトの名無しさん [2020/06/14(日) 06:21:59 ID:iYtMGgBJ.net]
C#、Electron、RubyはC++よりはるかに優れているので、そっち使ったほうが良いと思います。
それらは実行時最適化のおかげでC++の10倍速いという実験結果もあります。

337 名前:デフォルトの名無しさん mailto:sage [2020/06/14(日) 06:23:08 ID:kJWeEmyo.net]
>>331
C#は、GUI部品はCで書かれているWin32を使っているので、簡単な
HelloWorld程度ではC++並の速度が出ているように見える。
ところが、使うメモリの量が上がってくると急激に遅くなる特徴がある。
メモリだけでなく、GUIパーツが多くなるだけでも遅いと聞いている。
凄腕プログラマの中には、実感としてC++の10倍遅い、という人がいる位。

現にVSやExpressionWeb 4の起動速度は以上に遅いし、起動後もとても遅い。

338 名前:デフォルトの名無しさん mailto:sage [2020/06/14(日) 06:23:55 ID:kJWeEmyo.net]
>>332
みたいに嘘を言う人がいるのでだまされないほうがいい。
後で困るのは自分。

339 名前:デフォルトの名無しさん [2020/06/14(日) 06:25:03 ID:iYtMGgBJ.net]
>>334
対立求めてる人はとっとと追い出したほうが良い。

340 名前:デフォルトの名無しさん [2020/06/14(日) 06:42:43.23 ID:iYtMGgBJ.net]
>>334
おまえみたいに片棒担ぐやつもいないほうが良い。
おまえには王者の風格が無い。
何言ってんだふふんと、真のC++使いなら思えるはず。
おまえはC++を使えていない。

341 名前:デフォルトの名無しさん mailto:sage [2020/06/14(日) 07:29:43.89 ID:kJWeEmyo.net]
>>355
>何言ってんだふふんと、真のC++使いなら思えるはず。

いや、C++は沢山の問題点を持っていることは事実である。
しかし、効率面でC#は、C++には大差で負けることも、現実のアプリの例では
垣間見えることもまた事実。



342 名前:デフォルトの名無しさん [2020/06/14(日) 07:32:52.41 ID:iYtMGgBJ.net]
じゃあいちいち他言語を下げるのはおやめなさい。
王者には王者の気品が求められるのです。

343 名前:デフォルトの名無しさん [2020/06/14(日) 07:34:59 ID:VVffaeyk.net]
>>331
>>333
労力的にはどれほど違うと思いますか?イメージでいいのですが
個人で

344 名前:デフォルトの名無しさん [2020/06/14(日) 07:35:16 ID:VVffaeyk.net]
c++使うといつまでも完成しないなんて話を聞いたもんですから

345 名前:デフォルトの名無しさん mailto:sage [2020/06/14(日) 08:29:10.72 ID:7AEk3bXh.net]
いつまでも完成しないって
バカだからだろ

346 名前:デフォルトの名無しさん mailto:sage [2020/06/14(日) 08:36:28.26 ID:qmm3PCBI.net]
可読性・難易度・バグりにくさ

動的言語
Ruby : 1
JavaScript : 3

静的言語
C# : 5

ポインターのある言語
C : 15
C++ : 75

347 名前:デフォルトの名無しさん mailto:sage [2020/06/14(日) 08:39:06.10 ID:g+gmh/oa.net]
わかりやすい例でいうと、Windows10がどんどん重くなっているが
それは今までC++で書かれてた部分をC#で書き換え続けられているからといっても過言ではない

348 名前:デフォルトの名無しさん mailto:sage [2020/06/14(日) 09:06:28.85 ID:MuaS91+w.net]
>C++で書かれてた部分をC#で書き換え続けられている
それは別になっとらんぞ
Windowsチームって.NET嫌ってるし

349 名前:デフォルトの名無しさん [2020/06/14(日) 09:14:55.23 ID:VVffaeyk.net]
>>341
手間がどのくらい違うのですか?

350 名前:デフォルトの名無しさん mailto:sage [2020/06/14(日) 09:18:34.27 ID:7AEk3bXh.net]
>>345
同じダロ
頭悪くなければ
ライブラリを集めて使いこなせるくらいの頭な

351 名前:デフォルトの名無しさん mailto:sage [2020/06/14(日) 09:20:16.16 ID:g+gmh/oa.net]
>>344
例えばタスクマネージャーや電卓はUWPだと思うが、これって.NETの焼き直しか再利用だと思ってるけどどうなんだろう



352 名前:デフォルトの名無しさん mailto:sage [2020/06/14(日) 09:32:29.33 ID:MuaS91+w.net]
>>347
シェルとかも含めたXAML UIの部分のこと言ってるんだろうけど
あれはC#からも呼び出せるだけのネイティブで実装されたAPI(WinRT)だよ
今の電卓なんかはまさしくわかりやすい例で、特例でコード公開されてて全部C++(/CX)だよ
新規に打ち出そうとしてるWinUIもC++(/WinRT)での実装

UWPアプリ単体で見ればC++だったりC#だったりまちまちだろうけど
今はXAML=WPF=C#のイメージは切り離した方が良い

353 名前:デフォルトの名無しさん mailto:sage [2020/06/14(日) 10:00:52 ID:g+gmh/oa.net]
>>348
納得した
にしても以前の電卓よりはるかに動作が重い
呼び出し元より呼び出し先に重い何かがある気がしてならない

354 名前:デフォルトの名無しさん mailto:sage [2020/06/14(日) 10:31:38 ID:v+4IVp6H.net]
>>336
王者の風格とか気品とか、真のC++使いだとか、そのキッズが喜びそうなワードばかり並べ立てて何がしたいの?

355 名前:デフォルトの名無しさん mailto:sage [2020/06/14(日) 10:36:59 ID:UiekgbQo.net]
(精神的)キッズが喜びたがってるのだろう

356 名前:デフォルトの名無しさん mailto:sage [2020/06/14(日) 10:59:07.21 ID:fGEYrFA/.net]
確かに「王者の風格」がでてきたときは0.5秒くらい「えっ?」てなった

357 名前:デフォルトの名無しさん mailto:sage [2020/06/14(日) 10:59:49.90 ID:v+4IVp6H.net]
>>339
プログラムの実装時の労力は言語だけでなく作る対象によっても変わるからケースバイケースだけど、言語の習得の労力で言えば、C++でまともな実用的なプログラムを作れるレベルに達するのは他の言語に比べて大変だよ。
もし今現在まったくプログラミングの経験がないなら、C++よりC#から始めた方がいい。
C#で速度がでないことを心配するなら、C#で作ってどう改善しても速度が足りないとなってからC++を学習してC++に移植する方がトータルでは早くできそう。
そもそもC#では速度的に厳しいような難易度の高いプログラムを、未経験者がいきなりC++で作り始めることはかなりこんなんだと思うぞ。

358 名前:デフォルトの名無しさん mailto:sage [2020/06/14(日) 11:01:19.61 ID:u20vDDhC.net]
コードの王子さま「まだまだだね」

359 名前:デフォルトの名無しさん mailto:sage [2020/06/14(日) 12:21:48.10 ID:7AEk3bXh.net]
孤高だからな

360 名前:デフォルトの名無しさん mailto:sage [2020/06/14(日) 13:07:15 ID:8/gzWF83.net]
>>323,>>340は(ある程度)事実だろ

361 名前:デフォルトの名無しさん mailto:sage [2020/06/14(日) 15:06:28.05 ID:CHdP3JGu.net]
>>348
>今の電卓なんかはまさしくわかりやすい例で、特例でコード公開されてて全部C++(/CX)だよ
>新規に打ち出そうとしてるWinUIもC++(/WinRT)での実装

C++/CX はC++ではない。
それが遅い原因だ。
C++/CXを勝手にC++と思ってしまう人が出て本物のC++は迷惑。



362 名前:デフォルトの名無しさん mailto:sage [2020/06/14(日) 15:42:22.25 ID:CHdP3JGu.net]
>>342
>C : 15
>C++ : 75

もともと、C++は、C with class 程度の意味で現れて、それで人気が出た。
その時は今ほど複雑でなく、Cではメモリー解放 free() を全部完全にプログラマが
書かなければならなかったところと、C++のデストラクタを使えば、ほぼ自動化することが出来た。
これにより、C++はCよりはメモリー安全になった。
型をC以上に厳密にすることで、コンストラクタとデストラクタの呼び出される回数が、ほぼ必ず同じに
なるように設計されていた。
キャスト構文を使わず、それぞれのデストラクタの中で、子供のオブジェクトに対する delete 文を
書き忘れない限り、ほぼ、コンストラクタとデストラクタは一対一に対応するので、
結果的にメモリーの解放間違いはほぼ無くせる設計になっていた。
これが、(恐らく)後になって RAII という言葉で語られるようになっていった。
また、クラスメンバに対しprotected属性が使えることも安全性を高めた。
さらに、Cでは実行段階で関数を超高速に切り替えるためには関数ポインタを使うことが必須であったが、
C++では仮想関数でそれを行うことが出来るようになり、間違いを減らすことが可能になった。
クラスの継承の概念は、既に作ったプログラムを少しずつ変化させることに役立つため、
プログラムを美しく設計できるようになった。

C++は今のバージョンは難しく見えるが、もともとはCを安全にすることにとても役立つものであった。

363 名前:デフォルトの名無しさん mailto:sage [2020/06/14(日) 16:14:13.31 ID:PqSUj3Py.net]
「本物のC++」であるかどうかと速度は直接関係はないと思うが

364 名前: mailto:sage [2020/06/14(日) 16:48:51.00 ID:p2S0rZ5U.net]
>>358
>C++のデストラクタを使えば、ほぼ自動化することが出来た。

それ、全然「自動化」になっていないですよ…

365 名前:デフォルトの名無しさん mailto:sage [2020/06/14(日) 17:11:05 ID:CHdP3JGu.net]
>>359
C++/CXは、メモリ関連で本物のC++とは異なったやり方をしている。
C++が速いのはまさにメモリ関連であるのだから、ソースの書き方が似ていると
しても、そこを変えた言語で書いたプログラムの速度がC++と同じであるとは
とても言えない。

366 名前:デフォルトの名無しさん mailto:sage [2020/06/14(日) 17:28:22 ID:u+r3XtR9.net]
この狂人C++/CXをC++/CLIと勘違いしてないか?

367 名前:デフォルトの名無しさん mailto:sage [2020/06/14(日) 18:05:23.75 ID:UiekgbQo.net]
デストラクタをまともに設計できる奴があんまおらんからな。
てか資源解放てインスタンスの種類よりも生成したシチュエーションによることのが多いし
シチュエーション

368 名前:事に開放メソッド選ぶ方がわかりやすい。
だからgoではdefer文による解放なんだろ。
[]
[ここ壊れてます]

369 名前:デフォルトの名無しさん [2020/06/14(日) 18:12:49.93 ID:iYtMGgBJ.net]
>>350
そらキッズを説得するためだからよ。

370 名前:デフォルトの名無しさん mailto:sage [2020/06/14(日) 18:16:02.14 ID:CHdP3JGu.net]
>>363
ファイルハンドルの様な「資源」は、デストラクタによる解放は実は向いてない。
メモリーが向いている。
もともと、C++のデストラクタは、メモリー安全のためが主目的であったと
言っても過言ではなく、RAIIの R = Resource というのは、変な話。

371 名前:デフォルトの名無しさん mailto:sage [2020/06/14(日) 18:29:52.90 ID:PqSUj3Py.net]
>>365
全く逆だなぁ。
資源のように解放するタイミングが比較的重要なものこそデストラクタが向いているだろう。
メモリだけならGCでも全然問題ないし。



372 名前:デフォルトの名無しさん mailto:sage [2020/06/14(日) 18:36:46.54 ID:RsfUA2Vq.net]
int と long long の和って long long ですよね?
int と double の和も double ですよね?
こういうのって大きいデータ型にキャストされると思って良いですか

373 名前:デフォルトの名無しさん [2020/06/14(日) 19:18:11 ID:VVffaeyk.net]
タイルマップエディタを作る場合はC++とC#どちらがいいですか?

374 名前:デフォルトの名無しさん mailto:sage [2020/06/14(日) 19:26:48.64 ID:v+4IVp6H.net]
>>367
基本的にその考え方であってる。
細かいところは汎整数拡張でググってwikipediaを見てくるといいよ。

375 名前:デフォルトの名無しさん mailto:sage [2020/06/14(日) 19:36:58.18 ID:q7JXwjKs.net]
>>368
どっちでもいい
どうせほとんどは途中で挫折するんだし、苦労して作ったところで現実には誰にも使われずに消えていく
しかしその努力は決して無駄になるわけではなく、君の中には多少なりとも技術と経験が残るだろう
目先ではなく、将来何がしたいのか、そのためには何を習得すべきなのかを考えなさい

376 名前:デフォルトの名無しさん [2020/06/14(日) 19:48:57.07 ID:VVffaeyk.net]
将来何をしたいか、わからないです
2dにopenglは必要ですか?
必要ならC++なんでしょう

377 名前:デフォルトの名無しさん mailto:sage [2020/06/14(日) 19:53:15.45 ID:irom8koH.net]
2dにOGLは正直オプションだな。
OGLはグローバル規格だから、WindowsとかOSに縛られるということが少ない。
しかし、近年のGPUは3Dを基準に作っているからOGLを使った方が速度は出るかもしれない。
なお、OGLは特に言語は規定していない。

378 名前:デフォルトの名無しさん mailto:sage [2020/06/14(日) 19:56:51.60 ID:SBQSrEYR.net]
ゲーム作りたいのか?
今時のゲーム開発ではそもそもOpenGLを直で叩く必要はまずなくて、Unityなどの開発スイートを使うのが普通だ
まあC#でいい

379 名前:デフォルトの名無しさん [2020/06/14(日) 20:05:56.73 ID:VVffaeyk.net]
じゃあエレクトロンで作るよ

380 名前:デフォルトの名無しさん mailto:sage [2020/06/14(日) 20:21:24.84 ID:irom8koH.net]
その場合は、もしかしたらWEBGLかもしれんな。

381 名前:デフォルトの名無しさん [2020/06/14(日) 20:33:14.43 ID:VVffaeyk.net]
大事ナノは結局ロジックだと思うので(´・ω・`)速度とか考えずにやります



382 名前:デフォルトの名無しさん mailto:sage [2020/06/14(日) 21:07:35 ID:ZstiKk82.net]
UE4はC++なので、ゲームを仕事にしたいなら、C++は使えた方がいい。
unityもスマホゲーや小規模開発でシェア大きいので、Unityで使うC#もやっておこう。
つまり、C#とC++両方を当然に使えるようになるべき。
趣味で作りたいだけなら、資料の多いunityでも、最近VE5の発表で熱いUE4でも、好きな方やればよい。
グラフィックエンジニアやりたいなら、DirectX12やVulcanにてをだしてもよいかもしれない。茨の道だがね

383 名前:デフォルトの名無しさん mailto:sage [2020/06/14(日) 22:02:31.10 ID:kf4Cc+ef.net]
>>366
そうだよね
GC言語はある意味一番簡単なメモリの管理は自動化できても、それよりクリティカルなメモリ以外のリソース管理が悲惨なことになる

384 名前:デフォルトの名無しさん mailto:sage [2020/06/14(日) 22:11:34.75 ID:ye8ce71J.net]
>>366
だから、あなたみたいなGC言語に慣れた人が多くなって、C++の本質が理解出来て
無くて RAIIなどといい始めたんだ。
ちがうんだよ、本来のデストラクタの主目的は。

デストラクタの中には、pure C の free() のように、本質的にはどんな場合に
呼び出しても失敗することが無いような関数だけを書くことが基本。
それを昇華すれば、deleteを書いても、絶対に失敗しないことになる。
これは数学的帰納法を理解できない人に入っている意味が分からないと思うが。

とにかく、デストラクタの役割も作られた目的も、メモリの安全な解放だったの
であって、リソースの開放のためでは無いので、リソースの解放をデストラクタ
の中に書くというのはさまざまな問題を生む。

385 名前:デフォルトの名無しさん mailto:sage [2020/06/14(日) 22:29:21.16 ID:ye8ce71J.net]
>>366
>資源のように解放するタイミングが比較的重要なものこそデストラクタが向いているだろう。
少なくとも初期のころのC++は、そのようなことがデストラクタの主目的ではなかった。
今、GCでやっていることが効率が悪いことを見越して、かつ、メモリー安全性を確保するために
発明されたのがデストラクタだ。

数日前にも、ファイルハンドルなどのリソースをRAIIを使ってデストラクタで閉じようとすると、
失敗した時に対処できなくなるという非常に難しい問題が生じることが議論されていた。
メッセージボックスさえ出すことができないかも知れないのだ。
メッセージボックスを出そうとすることがむしろ仇となって、その瞬間に大切なデータが保存できて無い
アプリもろともダウンしてしまう可能性がある。

なぜそういうことがおきるかというと、もともと、デストラクタは、失敗する関数をそこに
含めることを想定していなかったからだ。

386 名前:デフォルトの名無しさん mailto:sage [2020/06/14(日) 22:37:05 ID:OGb6Unub.net]
>C++の本質が理解出来て無くて RAIIなどといい始めたんだ。

RAIIって20世紀の頃の禿のお言葉なんだがw

387 名前:デフォルトの名無しさん mailto:sage [2020/06/14(日) 22:52:30.07 ID:ye8ce71J.net]
Bjarne Stroustrup 氏の事を禿と言ってしまう人の人間性を疑う。
名前が覚えられないのか。

388 名前:デフォルトの名無しさん mailto:sage [2020/06/14(日) 22:54:20 ID:aLpfCXag.net]
あら議論から逃げよったわw

389 名前:デフォルトの名無しさん mailto:sage [2020/06/14(日) 22:58:03 ID:MuaS91+w.net]
妙だな? 誰も禿をびよーねとは言っていないのに・・・

390 名前:デフォルトの名無しさん mailto:sage [2020/06/14(日) 23:03:05 ID:PqSUj3Py.net]
>>380
向いてる向いてないと元々の目的というのは直接関係ないな。
後半の話も、リソースの解放ができないということではなくてメッセージボックスを
出せないというだけでしかないし。

391 名前:デフォルトの名無しさん mailto:sage [2020/06/14(日) 23:04:20.52 ID:ye8ce71J.net]
まあ、RAIIが、20世紀に考え出されていたのであれば、それはそれで良しとしよう。
でも、彼の頭の中でどうであったとせよ、当時の本を見れば、デストラクタの
説明としてほぼ必ずと言って、メモリ解放のために用いる例が書かれていたのだから、
C++を実用的な観点で見た時にデストラクタの一番の使い道はメモリ解放であった
ことは疑いの無い事実だろう。



392 名前:デフォルトの名無しさん mailto:sage [2020/06/14(日) 23:09:16.33 ID:hr1wykPX.net]
>>386
誰も言ってくれてないから俺が言ってやるけど
お前は自分が見えてないよ
お前は人に教える立場ではなく
みんなに教えてもらってる立場なんだぞ
見てて恥ずかしいわ

393 名前:デフォルトの名無しさん mailto:sage [2020/06/14(日) 23:13:56.65 ID:OGb6Unub.net]
>>386
ではここで太古から存在するハゲFAQを見てみましょう
https://www.stroustrup.com/bs_faq2.html#finally

394 名前:246 mailto:sage [2020/06/14(日) 23:28:20.22 ID:qmm3PCBI.net]
>>247
に書いたけど、

デストラクタ中の例外の扱いについて、
More Effective C++ にも書いてある

395 名前:デフォルトの名無しさん [2020/06/14(日) 23:32:05.30 ID:iYtMGgBJ.net]
>>388
英語じゃねーか、日本語で書けよ。

396 名前:デフォルトの名無しさん mailto:sage [2020/06/14(日) 23:57:28.27 ID:ye8ce71J.net]
アメリカ人は馬鹿だから参考にならない。
彼らのために世界中の生産性が下がっている。

397 名前:デフォルトの名無しさん mailto:sage [2020/06/15(月) 00:10:53 ID:Bn8xL7m+.net]
禿先生はデンマーク人だぞ

398 名前:デフォルトの名無しさん mailto:sage [2020/06/15(月) 00:13:02 ID:1aJEphkT.net]
>>390
王者の気品とか言っちゃう奴の日本語よりはまともな人の書いた英語の方が遥かに読みやすいし、内容の価値は比べるまでもないw

399 名前:デフォルトの名無しさん mailto:sage [2020/06/15(月) 00:23:21.40 ID:94IDrwxi.net]
以上、本日のASDLおじいちゃん演説会でした

400 名前:デフォルトの名無しさん mailto:sage [2020/06/15(月) 00:56:17.21 ID:Hw5ljvB7.net]
で、本物のC++はどうやったら食べられるのですか

401 名前:デフォルトの名無しさん mailto:sage [2020/06/15(月) 02:02:25.91 ID:oHOmQwtH.net]
ドラえもんの暗記パンで



402 名前:デフォルトの名無しさん mailto:sage [2020/06/15(月) 04:52:38 ID:1aJEphkT.net]
>>394
ASDLって何だ? ASDのことだろうか。
まさかADSLとごっちゃになってるんだろうか。
ホントに英語はまったくダメなんだな。英語の方が読みやすいなんて言って悪かったよ。

403 名前:デフォルトの名無しさん mailto:sage [2020/06/15(月) 09:43:39 ID:Q9IHrxmr.net]
std::listやvector,map,unordered_mapなどのコンテナのイテレータについての質問です
コンテナのある要素を指すイテレータを保存してるときに、
そのコンテナに対して変更が加えられたとき、保存したイテレータは有効なのでしょうか??

例えば、元の要素が削除されたら、無効になるのは想像つきます
例えば、前後に別の要素が追加されたら、保存したイテレータは元の同じ要素を指してる保証はあるのでしょうか??

std::listはリンクリストなので、前後に要素を追加されても影響受けなさそうですが?
std::vectorはインデックスで管理してるとダメそう?
std::mapは?

404 名前:デフォルトの名無しさん mailto:sage [2020/06/15(月) 10:08:43 ID:w4yns3wG.net]
イテレータが無効になる場合はコンテナの種類と操作によって決まっているのでまともな解説にはちゃんと書いてある。
例えばvectorのinsert()はストレージの再確保が行われなければinsertした場所より前の要素を指すイテレータは無効にならないといった具合。

405 名前:デフォルトの名無しさん mailto:sage [2020/06/15(月) 10:13:02 ID:Q9IHrxmr.net]
>>399
https://en.cppreference.com/w/cpp/container
英語の方見たらイテレータの無効化条件書いてありました
ありがとうございます

406 名前:デフォルトの名無しさん mailto:sage [2020/06/15(月) 12:16:11.97 ID:LBP04AxD.net]
>>400
日本語のほうにも書いてあるような?
https://ja.cppreference.com/w/cpp/container#.E3.82.A4.E3.83.86.E3.83.AC.E3.83.BC.E3.82.BF.E3.81.AE.E7.84.A1.E5.8A.B9.E5.8C.96

407 名前:デフォルトの名無しさん [2020/06/15(月) 14:06:35.72 ID:iqqqiJ5Y.net]
デストラクタで例外を出す可能性があるクラス Hoge について

---- A.cpp
Hoge hoge;
int main(int argc, char **argv)
{
// hoge を使う
return 0;
}
---- A.cpp ここまで

---- B.cpp
int main(int argc, char **argv)
{
Hoge hoge;
// hoge を使う
return 0;
}
---- B.cpp ここまで

B だと例外補足されるというか表示されるけど
A だと握り潰されてプロセス終了する(例外出てても気付けない)?

408 名前:デフォルトの名無しさん mailto:sage [2020/06/15(月) 14:12:45.65 ID:+GKLccgq.net]
はちみつ餃子 さまを筆頭とする方々にお答えしていただけることを期待しております。

std::forward()がどうやって実装されているかを調べるため、
MSのオープンソースのSTLのソースの「STL-master」の中の type_traits
というのを見ていたのですが、仕組みが完全には分かりません。
以下の1つ目のforwrd()は、左辺値参照で受け取るまでは分かりそうなのですが、
その後、return static_cast<_Ty&&>(_Arg) としているのに、結果は、左辺値に
なっていなければ、forward()の使用に合わないはずですが、なぜ、
右辺値参照にcastしているのに、左辺値参照のままなのでしょうか?

/* 左辺値を受け取る forward() のテンプレートらしいですが、
  _Arg が左辺値参照ならば(?)、static_cast<_Ty&&>(_Arg)
  と cast しても、右辺値参照になるとるは限らない??? */
template <class _Ty>
_NODISCARD constexpr _Ty&& forward(
  remove_reference_t<_Ty>& _Arg) noexcept { // forward an lvalue as either an lvalue or an rvalue
  return static_cast<_Ty&&>(_Arg);
}

// 右辺値を受け取る forward() のテンプレートらしいです :
template <class _Ty>
_NODISCARD constexpr _Ty&& forward(remove_reference_t<_Ty>&& _Arg) noexcept { // forward an rvalue as an rvalue
  static_assert(!is_lvalue_reference_v<_Ty>, "bad forward call");
  return static_cast<_Ty&&>(_Arg);
}

template <class _Ty>
_NODISCARD constexpr remove_reference_t<_Ty>&& move(_Ty&& _Arg) noexcept { // forward _Arg as movable
  return static_cast<remove_reference_t<_Ty>&&>(_Arg);
}

409 名前:はちみつ餃子 mailto:sage [2020/06/15(月) 14:46:55.44 ID:WVo0Ka65.net]
>>403
正確なルールを説明するとなると長くなる (というか私もそんなに入り組んだところまで把握してない) んだが、
「参照の参照」を作った時に調整されるルール reference collapsing によるものだと思う。
左辺値参照から右辺値参照を作ろうとしたときには左辺値参照に調整される。

410 名前:デフォルトの名無しさん mailto:sage [2020/06/15(月) 15:04:09 ID:+GKLccgq.net]
>>404
回答有難うございます。

一生懸命調べたところ、こんな記述を見つけました。Tがオブジェクト型の場合、(T &&)x のように cast すると、
結果は、右辺値にならずに xvalueになるようです。
でもそこから先は理解できてません。

https://stackoverflow.com/questions/40801765/is-it-an-rvalue-or-lvalue-after-a-cast

From expr.cast (this is applicable from C++11 and later)
C++ 11 以後の場合 :

The result of the expression (T) cast-expression is of type T.
式「(T)cast-expression」の結果は、T 型である。

The result is an lvalue if T is an lvalue reference type or an rvalue reference to function type and an xvalue if T is an rvalue reference to object type;
Tが関数型への左辺値参照/右辺値参照の場合は、結果は 左辺値で、
Tがオブジェクト型への右辺値参照の場合は、結果は xvalue である。

otherwise the result is a prvalue.
そのどちらでも無い場合、結果は、prvalue である。

411 名前:デフォルトの名無しさん mailto:sage [2020/06/15(月) 15:11:00.42 ID:UmY/I/0X.net]
>>405
今後のために、
先輩指名で相談に行って
あなたの説明よりネットにはこんなの書いて有りますけど?
なんてのは失礼でイラッとするからやめときや



412 名前:デフォルトの名無しさん mailto:sage [2020/06/15(月) 15:15:51 ID:kn0xQdMp.net]
より詳しい説明が出るのは役に立つんだから別にいいだろ

それよりもはちみつごときに様つけたりここの住人の筆頭にするな

413 名前:はちみつ餃子 ◆8X2XSCHEME mailto:sage [2020/06/15(月) 15:17:44 ID:WVo0Ka65.net]
>>405
xvalue は rvalue の一種。

414 名前:デフォルトの名無しさん mailto:sage [2020/06/15(月) 16:19:05.98 ID:+GKLccgq.net]
>>408
lvalue, xvalue, prvalue は排反集合なのですが、
glvalueとrvalueは、正確に

#define IS_GLVALUE(X) (IS_LVALUE(X) || IS_XVALUE(X)) // glvalue は、lvalue と xvalue の和集合
#define IS_RVALUE(X) (IS_PRVALUE(X) || IS_XVALUE(X)) // rvalue は、 prvalue と xvalue の和集合

なので、rvalueであっても、xvalueで無い場合がありえます。
それは、prvalueです。

415 名前:デフォルトの名無しさん mailto:sage [2020/06/15(月) 16:32:37.00 ID:+GKLccgq.net]
>>407
>それよりもはちみつごときに様つけたりここの住人の筆頭にするな
このスレでは、彼が一番C++に詳しいと思うんです。
もしかしたら日本の中でもかなり詳しい人の内に入るのではないでしょうか。

416 名前:デフォルトの名無しさん mailto:sage [2020/06/15(月) 17:00:27 ID:+GKLccgq.net]
>>409
>なので、rvalueであっても、xvalueで無い場合がありえます。
このことは、正しいのですが、
#define IS_RVALUE(X) (IS_PRVALUE(X) || IS_XVALUE(X)) // rvalue は、 prvalue と xvalue の和集合
によれば、
xvalueであれば 必ず rvalue ではあるので、
「xvalue は rvalue の一種」
という命題は必ず真で、はちみつ餃子さんのおっしゃっていることは正しいと思います。
rvalueが動物、xvalueが犬、であるような関係になります。
動物(rvalue)であっても犬(xvalue)で無い場合がありえますが、
犬(xvalue)であれば必ず動物(rvalue)であり、犬(xvalue)は動物(rvalue)の一種です。

417 名前:デフォルトの名無しさん mailto:sage [2020/06/15(月) 17:03:05.14 ID:+GKLccgq.net]
「xvalue は rvalue の一種」でもあり、
「xvalue は glvalue の一種」でもあるのですね。

418 名前:はちみつ餃子 mailto:sage [2020/06/15(月) 17:11:13.40 ID:WVo0Ka65.net]
>>406
疑問が深まったら掘り下げるのは別にいいんじゃね。 根拠も提示されてるし。

>>410
ワイは趣味プログラマやで。
実務家が言語仕様の詳細に興味がないのもよくあることなので、
プロのプログラマが仕様に詳しいとは限らんけど、
平均的には日常的に C++ でプログラミングしているやつの方が詳しいよ。 当然に。

>>409
あれっ、そうか。 カテゴリに関しては俺の間違い。
で結局は >>404 で述べた通り reference collapsing が適用されるってだけだと思う。
https://timsong-cpp.github.io/cppwp/n3337/dcl.ref#6

419 名前:はちみつ餃子 ◆8X2XSCHEME mailto:sage [2020/06/15(月) 17:18:57 ID:WVo0Ka65.net]
いや、なんか違う気もしてきた。
わかんね。

420 名前:デフォルトの名無しさん mailto:sage [2020/06/15(月) 18:34:21.52 ID:+GKLccgq.net]
>>413
>平均的には日常的に C++ でプログラミングしているやつの方が詳しいよ。 当然に。
C++は、何十年も前に既に完成している言語なので、実態はわかりませんが、仕事をC++を使っている人でも、はちみつ餃子さんのようには新しい仕様を知らない人の方が多いのではないかと思うのです。

421 名前:デフォルトの名無しさん mailto:sage [2020/06/15(月) 20:04:29.90 ID:fMEeoq9p.net]
はちみつ餃子 さまを筆頭とするはちみつ餃子さまにお答えしていただけることを期待しております。

普段どんな仕事をしてるの?



422 名前:デフォルトの名無しさん mailto:sage [2020/06/15(月) 20:05:26.73 ID:+GKLccgq.net]
>>405
「The result is an lvalue if T is an lvalue reference type or an rvalue reference to function type and an xvalue if T is an rvalue reference to object type;」
の部分の訳が一部間違っていて、正しくは、
「Tが左辺値参照型か、または、関数型への右辺値参照の場合は、結果は 左辺値で、
 Tがオブジェクト型への右辺値参照の場合は、結果は xvalue である。」
ということのようです。

結果として、>>403 の return 文のオペランドの
static_cast<_Ty&&>(_Arg)
の部分は、
1. _Argの型が左辺値参照型の場合、左辺値(i & !m)
2. _Argの型が右辺値参照型の場合、xvalue(右辺値の一種, i & m)
となるようです。

423 名前:デフォルトの名無しさん mailto:sage [2020/06/15(月) 20:13:24.30 ID:ZNXm/M6v.net]
自分のレスにレス返すスタイルなんなの
自分の日記帳でやれよ

424 名前:デフォルトの名無しさん mailto:sage [2020/06/15(月) 20:48:28.91 ID:hnmQwUn9.net]
これ前の人だよね

425 名前:デフォルトの名無しさん mailto:sage [2020/06/15(月) 21:31:20.35 ID:bSwpQKjB.net]
結局答えられないんですねの人?

426 名前:デフォルトの名無しさん mailto:sage [2020/06/15(月) 21:44:07.48 ID:Q9IHrxmr.net]
また、質問します。
アプリでunordered_mapやunordered_setのコンテナ10個くらい使うのですが問題はキーの型が可変長でstd::stringで結構長いことです
具体的にはキーはファイルパスとかになるのですが
で、頻繁にコンテナを使用します
ファイラーみたいなアプリを想定して

このとき、キーをstringにするとコピーなどのオーバーヘッドが発生?すると思いますがさすがにこのレベルは気にした方がよい?

427 名前:デフォルトの名無しさん mailto:sage [2020/06/15(月) 21:48:49 ID:Q9IHrxmr.net]
ユーザーがカレントフォルダ移動したり、ファイル一覧のリストビューをスクロールするだけで走ります


で、きにする場合はキーをstd::shated_ptrでくるめばいいんですかね?他に方法ありますでしょうか?

428 名前:デフォルトの名無しさん mailto:sage [2020/06/15(月) 22:01:06.47 ID:LBP04AxD.net]
>>421 効率は実測が基本。

429 名前:デフォルトの名無しさん mailto:sage [2020/06/15(月) 22:17:50.72 ID:Bn8xL7m+.net]
100万文字のstringをキーにしたって、unorderedの内部で扱うのはハッシュなんだから挿入や検索の速さは変わらん(ハッシュ計算のコストを除く)
そのファイラーが糞重いんだったら原因はそこじゃないと思うぞ

430 名前:デフォルトの名無しさん mailto:sage [2020/06/15(月) 22:52:38.98 ID:Q9IHrxmr.net]
ありがとうございます
>>423の言う通り最終的は実測でしょうが、キーをstringにしたときのキーのメモリコピーのオーバーヘッドを気にしてました
が、よく考えてみますと実際にキーのコピーが発生するのは実際に要素を挿入するとき1回だけっぽいですね

findメソッドやcountでキーを渡しますがキーを参照で渡しますし、hash関数も参照でキーの値を受けとりますし

431 名前:デフォルトの名無しさん mailto:sage [2020/06/15(月) 23:00:46.83 ID:Q9IHrxmr.net]
キーのコピーの頻度そこら辺を想像したことなかったので、びびってましたがびびる必要なかったぽいですね

ということ、普通にstringをキーに実装してみます



432 名前:はちみつ餃子 mailto:sage [2020/06/15(月) 23:00:50.65 ID:WVo0Ka65.net]
>>425
string はムーブ対応してるんで所有権を渡してしまうなら文字列全体のコピーはしないよ。

433 名前:デフォルトの名無しさん mailto:sage [2020/06/15(月) 23:12:46.11 ID:Q9IHrxmr.net]
>>427
なるほど、findやcountの場合はキーの値を実際にコピーする必要ないから、&&の引数のオーバーロードはないが、insertの場合は&&の引数で、所有権移せるバージョンもあるんですね

434 名前:デフォルトの名無しさん mailto:sage [2020/06/15(月) 23:14:22.14 ID:hnmQwUn9.net]
この人がどうかは知らないけど
スクリプト言語あがりはstring + mapばっか使うんだよね
万能さはわかるけどさ
それで効率が〜とか
どうなのそれw

435 名前:はちみつ餃子 mailto:sage [2020/06/16(火) 00:10:13.43 ID:1HqJhS8P.net]
ワイはもうおっちゃんやから小さい単位で型を作って名前を付けておかんと何をしよったかわからんようになるんやが、
文字列三昧で上手いことやれてまうやつはどういう脳みそをしとんや……。
と疑問に思ったこともあったんやけど、大抵の場合はうまいことやれとらんかった。

436 名前:デフォルトの名無しさん mailto:sage [2020/06/16(火) 00:48:04 ID:i3Et6pFy.net]
プログラマ2年目だけど全然クラス作れんワイ低みの見物
責務責務いうけどどっからどこまでが責務やねん

437 名前:デフォルトの名無しさん [2020/06/16(火) 01:42:35.85 ID:YM27wSPO.net]
いや、おそらくその設計間違ってるな。

438 名前:デフォルトの名無しさん mailto:sage [2020/06/16(火) 05:42:11 ID:5RaFaaPW.net]
std::string は参照カウントになってる場合もあるでしょ。
オブジェクトをコピーしても長さに応じたデータコピーが発生するとは限らない。
代わりに短い文字列ばっかりでも同じだけ重い可能性もあるんだが。

439 名前:はちみつ餃子 mailto:sage [2020/06/16(火) 08:52:22.88 ID:1HqJhS8P.net]
>>433
ちゃんとした実装なら短い文字列ではヒープアロケーションが発生しないような最適化 (いわゆる SSO) が入ってるよ。

440 名前:デフォルトの名無しさん mailto:sage [2020/06/16(火) 08:59:33.85 ID:7rFOsosY.net]
gccは参照カウントなstringは課題があるからやめたって10年以上前に聞いた気がするけど今はどうなんだろ

441 名前:デフォルトの名無しさん mailto:sage [2020/06/16(火) 13:38:01 ID:Ea3gt1wL.net]
>>123
>100万文字のstringをキーにしたって、unorderedの内部で扱うのはハッシュなんだから挿入や検索の速さは変わらん(ハッシュ計算のコストを除く)
厳密に言えば変わります。
データの個数がM、キーの文字数がNの場合、検索に掛かる時間は、
ハッシュを遣わなくて単純に比較した場合は、
O(MN)
となりますが、ハッシュ法の場合でも、
O(M + N)
となるので、掛け算と足し算の違いは有りますが、キーの文字数をいくら長くしても検索時間が増えない、というようなことはありません。



442 名前:デフォルトの名無しさん mailto:sage [2020/06/16(火) 15:27:53.17 ID:VeSUiyGP.net]
>>431
クエリとコマンド、リードとライトでとりあえず分けるとこからやったらええ

443 名前:はちみつ餃子 mailto:sage [2020/06/16(火) 15:55:59.04 ID:1HqJhS8P.net]
>>431
責務なぁ……。

俺はとにかく名前で考えるようにしてるよ。
名前を付けたい単位に分けて、それを書いている内に名前を付けたい部分が出来たら括り出して……
という風に繰り返してたら (少なくとも自分にとっては) だいたい使いやすいデザインが出来てる。
名前を付けたらそれの役割ってのはほとんど自明だったりするし。

ぼんやりした構造って頭に残り難くて何をやってたかわけわからんようになるので、
名前を付けるってのはかなり大事なことだと思う。

444 名前:デフォルトの名無しさん mailto:sage [2020/06/16(火) 18:27:56.96 ID:HoWpcnpR.net]
>>436
O(M+N) って、ハッシュ計算のコストを含めたうえでの最悪計算量でしょ。
ハッシュ計算のコストを除いた平均計算量を O(1) にすることも可能なのがハッシュの利点、というのが一般的かと。
https://ja.wikipedia.org/wiki/%E3%83%8F%E3%83%83%E3%82%B7%E3%83%A5%E3%83%86%E3%83%BC%E3%83%96%E3%83%AB
> ...検索や追加を要素数によらず定数時間O(1)で実現する。...

445 名前:デフォルトの名無しさん mailto:sage [2020/06/16(火) 18:49:47.04 ID:Ea3gt1wL.net]
>>439
キーはそんなにバイト数が長く無くて、常識的にはある程度で上限が有る事が多いので、通常はO(1)と書いてあるだけです。
なぜかというと、ハッシュ値で大体は特定できても、最後、キーが完全一致していることを確認しなくてはなりませんが、
その時に文字列の比較のために、文字列の文字数であるところのNに比例した時間が掛かるためです。

例えば、キーの文字列の長さNが、1GBだとすると、文字列比較のために1*10^9程度のループが必要となります。

446 名前:デフォルトの名無しさん mailto:sage [2020/06/16(火) 19:19:02 ID:HoWpcnpR.net]
>>440
そっか。一致比較が必要になる操作も確かに多いね。
N はわかったんだけど、 M もやっぱり最悪ケースの話ってことで合ってる?
「通常はO(1)」って言ってるし。

447 名前:デフォルトの名無しさん mailto:sage [2020/06/16(火) 19:21:15 ID:uOZIHf/t.net]
スレ立てるまでもないスレにも同じようなこと書いたのですがすみません

巨大なファイルを読み込んで書き出すプログラムを書いています
time1, data1-1, data2-1, data3-1......datan-1
time2, data1-2, data2-2, data3-2......datan-2

みたいな構造が延々と続いています

でこれをdataごとに
data1.csv
time1 data1-1
time2 data1-2

ってそれぞれ書き出して分割する感じなんです

vector<ofstream&> files;
for (auto filename : filenames)
{

448 名前:デフォルトの名無しさん mailto:sage [2020/06/16(火) 19:24:51.88 ID:uOZIHf/t.net]
失礼途中で送信してしまいました。

vector<ofstream&> files;
for (auto filename : filenames)
{
ofstream temp(filename, ios::out);
files.push_back(&temp);
}

こんな感じでofstreamの配列を作ってあとはそれぞれにデータを入れていこうとしたのですが
アクセス違反になります。スコープの外に出たらofstreamは勝手にcloseされる?そうなのでそのせいかなと思っています
複数のファイルに対して順々にデータを書いていきそれをループするのってどうしたらいいでしょうか

449 名前:デフォルトの名無しさん mailto:sage [2020/06/16(火) 19:29:01.32 ID:zbVOEmpz.net]
答え分かってんならちゃんと実体を外に持たせなよ
vector<ofstream> files;
for (auto filename : filenames)
{
ofstream temp(filename, ios::out);
files.push_back(std::move(temp));
}

450 名前:デフォルトの名無しさん mailto:sage [2020/06/16(火) 20:59:11.88 ID:i3Et6pFy.net]
通常はO(1)(で見積もっときゃまぁ大きくは外れない)

451 名前:デフォルトの名無しさん mailto:sage [2020/06/16(火) 22:57:05.95 ID:EUOlqdFN.net]
業務でC++やることになりました
どうせなら体系的に学ぼうと思い、本を買おうと思いますがおすすめありますか?
CとC#の経験はあります
Cは組み込み開発での利用に、C#はデザインパターンを少しは活用出来る程度のレベルです



452 名前:デフォルトの名無しさん mailto:sage [2020/06/16(火) 23:21:49.71 ID:yU3B6kSM.net]
>>436
キーの文字数Nはプログラムがビルドしおわったら変わらないのだから実質定数なのであって、
結局O(M)になるのでは…
(任意のxについて x + 定数 < a * xを満たす定数aを見出せるからオーダー表記の約束によりO(M+(定数)) = O(M)ェ、

しかもこの場合のMはデータの個数に比例するとわいえ、一般的はハッシュテーブルなら衝突しない限り
1回のテーブルアクセスで目的のエントリにたどり着くから、実際にはデータの個数÷ハッシュテーブルサイズ(エントリ数)
となるから衝突が無視できる(エントリ選択に統計的に偏りがなく、かつハッシュテーブルサイズが十分おおおきい
ならO(1)と逝って良いキモス、

453 名前:デフォルトの名無しさん mailto:sage [2020/06/16(火) 23:31:56 ID:yU3B6kSM.net]
あと1億文字のstring aと10文字のstring bとでハッシュキーを求める手間はどうかというと、
正直にやると文字数に比例するが
うまいことやったら定数にできる
もしくは文字列の構成時に都度ハッシュを更新するようにして、
ハッシュが入用になったときカタが付いている形ににする

454 名前:デフォルトの名無しさん mailto:sage [2020/06/16(火) 23:44:57.63 ID:Z1WD1bfY.net]
そんな事をするなら素直にノードのポインタを持て
と言いたい

455 名前:デフォルトの名無しさん mailto:sage [2020/06/16(火) 23:56:47 ID:yU3B6kSM.net]
それではもともとの問題が解決しない
一億文字のstring aがメモリ上に存在するとして、
まったく別の手段で同じ字面の一億文字の文字列bを作ってしまったとする
aはaのノードを指し、
bはbのノードを指す、としたときに、
2つのノードが実は同じ文字列であることを確かめるには、
プログラムが他にあまた生成した10億個の文字列を一つ一つ確かめ、
最長1億文字の比較を行わねば結論が出ない(
ハッシュテーブルなら一瞬で済む

456 名前:デフォルトの名無しさん mailto:sage [2020/06/16(火) 23:57:59 ID:yU3B6kSM.net]
訂正orz、
誤: 10億個の文字列
正: 10億個のノードの文字列

457 名前:デフォルトの名無しさん mailto:sage [2020/06/17(水) 01:21:46.64 ID:6+sJE+by.net]
>>441
>N はわかったんだけど、 M もやっぱり最悪ケースの話ってことで合ってる?
>「通常はO(1)」って言ってるし。
ハッシュ値の値の種類が仮に1024個だとすると、
データの個数がMが1024に収まる範囲だと検索時間が増えないのでO(1)と言えます。
しかし、Mが、1024*1024 個になった場合、1つのハッシュ値あたり、1024個の
キーが入ってしまう事になりますので、Mが1024個の時に比べて検索時間は1024倍に
なります。
これも、Mがある範囲内ではO(1)と言えますが、Mが極端に大きいと、やはり、O(M)となりますね。 []
[ここ壊れてます]

459 名前:デフォルトの名無しさん mailto:sage [2020/06/17(水) 02:05:09.95 ID:6+sJE+by.net]
補足しておくと、>>436
>ハッシュを遣わなくて単純に比較した場合は、
>O(MN)
と書きましたが、ハッシュを使わない場合でもキーがランダムに近い場合、ここまで悪くなくて
検索時間は、O(M) 程度で済みます。
なぜかというとキーの文字数Nが長くなっても、比較は先頭の方の文字をいくつか調べる
だけで異なることが分かってしまうことが多いためです。
少し複雑ですが、この事情は、文字数Nを大きくしても余り変わりませんが、
Nを固定して、データの個数Mを大きくしていった場合、だんだんと文字列を長く調査しないと
判断が付かないケースが増えてきます。
そのため、O(M^2)のような傾向が出てくるはずです。
ただし、これは、ハッシュを使わない場合で、かつ、キーがランダムの場合です。

460 名前:デフォルトの名無しさん mailto:sage [2020/06/17(水) 06:19:39.75 ID:y8i+/mqG.net]
>>442
識別子に使えない文字が含まれているが
本当にアクセス違反まで行ったのか?
コンパイルが通らないはずだぞ

461 名前:デフォルトの名無しさん mailto:sage [2020/06/17(水) 06:22:30.70 ID:y8i+/mqG.net]
>>443
左辺値参照を何だと思っている?
&tempは左辺値参照に渡せないし
tempを左辺値参照に渡したところで
forのブレースを抜けるたびにtempのdurationが満了していて
破棄済みのオブジェクト痕跡への参照になるだけだ



462 名前:デフォルトの名無しさん mailto:sage [2020/06/17(水) 06:25:00.03 ID:3yTyzYma.net]
読み違えてたスマンコorz
キーというのは検索する文字列そのものを指していたのかそうか…。n_

一方>>447-448
 キー = ハッシュキー
 ハッシュ = ハッシュキー
 N = ハッシュキーの長さ
の意味で書いていた、、、。...n_

463 名前:デフォルトの名無しさん mailto:sage [2020/06/17(水) 08:27:10 ID:y8i+/mqG.net]
つーかそれ以前の問題で左辺値参照はdefault constructibleでないので
そもそもvectorの要素になれない

464 名前:デフォルトの名無しさん mailto:sage [2020/06/17(水) 10:02:38.14 ID:Q2+1ZVNa.net]
>>444
凄い。しっかり動きました。ありがとうございます。
moveのこと全然理解できてないんで勉強します。

465 名前:デフォルトの名無しさん [2020/06/17(水) 10:38:40.12 ID:GES6ctGC.net]
富豪ですね判ります

466 名前:はちみつ餃子 mailto:sage [2020/06/17(水) 11:38:12.26 ID:3iRpcXWU.net]
>>457
今の C++ (C++11 以降) だと vector の要素に求める要件 (requirements) の中に DefaultConstructible は無いよ。
各メンバ関数 (コンストラクタも含む) の要件として要素が DefaultConstructible であることを要求するものはあるけど。

アロケータの方の要件で参照はダメってことになってるみたいなんで参照が駄目には違いないんだけど、
DefaultConstructible でないというのは直接の理由ではない。

467 名前:デフォルトの名無しさん mailto:sage [2020/06/17(水) 11:50:02.38 ID:yIGLezdW.net]
&&はテンプレートでは左辺にも右辺にもなる

468 名前:デフォルトの名無しさん mailto:sage [2020/06/17(水) 13:02:53.13 ID:6+sJE+by.net]
>>453
すみません、
>そのため、O(M^2)のような傾向が出てくるはずです。
これは忘れてください。
ハッシュを使わない場合の話ですが、Mが大きくなってもこのような傾向は出ず、
O(M)のままだと思われます。
なぜなら、同じハッシュ値に属するそれぞれのキーと、与えられたキーとの完全一致を
検査する際、何文字目で一致し無い事が分かるかについては、データの個数Mが大きく
なっても、その期待値は変化しないと考えられるためです。
つまり、完全一致検査時に、個々のキーとの完全一致検査をループして行う時、
1つずつのキーと与えられたキーとが一致し無い事が分かるまでに検査が必要な
先頭からの文字数の平均値は、データの個数が多くなっても変化しないと考えられます。
そのため、この検査に必要なトータル時間は、α・M のようになり、
αが定数になるため、記号で書けば O(M) となります。

469 名前:デフォルトの名無しさん [2020/06/19(金) 05:28:33 ID:LA4wBl0H.net]
windowsのフラットデザインのほうのuiですが、これがC#というやつですか?すごく起動が遅い

470 名前:デフォルトの名無しさん mailto:sage [2020/06/19(金) 09:08:14 ID:rQKhbTAp.net]
>>463
uwpかwpf
言語はあまり関係ないない
あとスレチ

471 名前:デフォルトの名無しさん [2020/06/19(金) 09:47:56 ID:LA4wBl0H.net]
どうもです

>>464
guiが重いということですかね



472 名前:デフォルトの名無しさん mailto:sage [2020/06/19(金) 23:16:25.19 ID:c7VHi+F3.net]
C++の仕様になぜGUIがない
言語が強制すればOSが統一できるのに

473 名前:デフォルトの名無しさん mailto:sage [2020/06/19(金) 23:21:04.03 ID:0XxGPvOp.net]
幻想だよ

474 名前:はちみつ餃子 mailto:sage [2020/06/20(土) 01:10:58.81 ID:OUofN66X.net]
>>466
出来ない仕様を作ったら仕様ごと無視されるだけだよ。
C++ はたとえ不格好になっても現実的であることを指向してる。

475 名前:デフォルトの名無しさん mailto:sage [2020/06/20(土) 01:14:26.54 ID:QdbcnniD.net]
GUIなんて流行ですぐ方法論も見た目もかわっちまうからな
20年ぐらい前ならウィンドウに必ずクローズボタンがあるみたいなの
必須だったろうけど、今のGUI設計でそんな前提の設計したら
「脳味噌20年前でとまっとるんか」いわれるのがオチ
スクロールバーとかもどんどん消えてるよな

476 名前:デフォルトの名無しさん mailto:sage [2020/06/20(土) 01:28:11.81 ID:YEdOsyO1.net]
まぁ上っ面をなぞるだけの平凡なGUIでもC++で規定してくれたら嬉しいけどねぇ
OSによらず同じC++のコードだけで簡単なGUIを出せるってなると色々捗る気はする

477 名前:デフォルトの名無しさん mailto:sage [2020/06/20(土) 02:01:25.69 ID:Zc+p+3CN.net]
そろそろ音声ユーザーインターフェイスはよ

478 名前:デフォルトの名無しさん mailto:sage [2020/06/20(土) 03:39:21 ID:ASLg4tM8.net]
>>470
初期のJavaみたいなのかな
あれがC++にあったら、確かに便利だわな

479 名前:デフォルトの名無しさん mailto:sage [2020/06/20(土) 03:43:42.23 ID:s3zB5lV1.net]
>>470
絶対駄目。
QtやFlutter、Unoなど、それを生業にしている民間業者がいるんだから、
民業圧迫になる。

480 名前:デフォルトの名無しさん mailto:sage [2020/06/20(土) 03:44:49.57 ID:s3zB5lV1.net]
>>473
C++ BuilderのGUIや、MFC、WinForms、WPFなども売り物だ。
それを統一してしまったら民主主義でも資本主義でもなくなってしまう。

481 名前:デフォルトの名無しさん mailto:sage [2020/06/20(土) 03:58:41.18 ID:s3zB5lV1.net]
もしそんなものを定義してしまったら、処理系を開発する会社が完全なる下請けになるじゃないか。



482 名前:デフォルトの名無しさん mailto:sage [2020/06/20(土) 06:11:52.19 ID:tz6HL6iw.net]
GUIやデータ構造に関しては現行はXMLに統一って流れじゃないかね
当然重くなるけど今はマシンパワーでカバーする感じ
そのうちXMLパーサーがハード化されてストレスなくなるだろうよ

483 名前:デフォルトの名無しさん mailto:sage [2020/06/20(土) 06:55:31.33 ID:8i84u99i.net]
>>473-475
標準って何のためにあると思う?

484 名前:デフォルトの名無しさん mailto:sage [2020/06/20(土) 07:21:58.33 ID:v44POU7a.net]
PythonとC++でI/Oの速度って変わるの?

485 名前:デフォルトの名無しさん mailto:sage [2020/06/20(土) 08:17:17 ID:3c7Ygm0n.net]
変わるよ
亀と兎くらい

486 名前:デフォルトの名無しさん mailto:sage [2020/06/20(土) 08:19:37 ID:v44POU7a.net]
>>479
システムコール呼ぶだけなのになんで違うん?

487 名前:デフォルトの名無しさん mailto:sage [2020/06/20(土) 08:25:37.47 ID:3c7Ygm0n.net]
ゴールを呼ぶまでに差が生まれる

488 名前:デフォルトの名無しさん mailto:sage [2020/06/20(土) 09:06:19.16 ID:v44POU7a.net]
んな変わらんってことねサンキュー

489 名前: mailto:sage [2020/06/20(土) 10:04:49.91 ID:KR8wyXv2.net]
>>470
java の awt レベルでいいから欲しいですねえ

490 名前:デフォルトの名無しさん mailto:sage [2020/06/20(土) 10:14:39.22 ID:huVEvmBy.net]
C++標準でも外部でも良いから簡単な記述で簡素なGUI作れるようになってほしいなあ

491 名前:デフォルトの名無しさん mailto:sage [2020/06/20(土) 11:25:01.67 ID:DAim0Dxd.net]
>>478
測定するのが基本



492 名前:デフォルトの名無しさん mailto:sage [2020/06/20(土) 11:59:28.75 ID:bxmHAIN3.net]
ファイルシステムなんかは事実上ほぼ仕様が枯れてきてるから標準化できたけど
この意味GUIはまだ枯れてないからな

493 名前:デフォルトの名無しさん mailto:sage [2020/06/20(土) 12:00:20.85 ID:p75lHsHl.net]
>>474
中の人?
飯の種がなくなるから新しい技術を導入するなっていうのは流石に賛同得られないぞ

494 名前:デフォルトの名無しさん mailto:sage [2020/06/20(土) 12:01:02.76 ID:bxmHAIN3.net]
エンドユーザーがC++とはアプリの外見のことだなんて誤解するようになるのはやだね

495 名前:デフォルトの名無しさん mailto:sage [2020/06/20(土) 12:05:52.12 ID:u8LBLBzP.net]
既存のどのGUIを基本にするかってだけで宗教論争起こすだろ

496 名前:デフォルトの名無しさん mailto:sage [2020/06/20(土) 12:10:58.69 ID:C5g3kKFk.net]
外見くらい好きに作らせろ

497 名前:デフォルトの名無しさん mailto:sage [2020/06/20(土) 12:12:20.45 ID:6XSjyfFJ.net]
こいうのは一種の中二病だよね
実際やってみれば
細かい制御ができない大雑把仕様

大掛かりなオレオレ仕様で学習が困難
ってなるのがオチ
おっさんになればわかる

498 名前:デフォルトの名無しさん mailto:sage [2020/06/20(土) 12:17:29.80 ID:hTyaQ2gm.net]
>>487
それらの中の人なら>>474みたいな的外れな馬鹿げた主張はしないと思う

499 名前:デフォルトの名無しさん mailto:sage [2020/06/20(土) 12:25:31 ID:6XSjyfFJ.net]
可能性あるとしたらwebkitを共通仕様にするって線かな
でかすぎるけどね

500 名前:デフォルトの名無しさん mailto:sage [2020/06/20(土) 12:35:51.45 ID:hTyaQ2gm.net]
フルスペックのGUIフレームワークではなく、ちょっとしたテストやデバッグに役立つ程度の簡素なものでもあると嬉しいんだけどね。

501 名前:デフォルトの名無しさん mailto:sasge [2020/06/20(土) 12:38:41.23 ID:s3zB5lV1.net]
>>494
Windows使えや。



502 名前:デフォルトの名無しさん mailto:sage [2020/06/20(土) 13:10:07.38 ID:s3zB5lV1.net]
規格を統一するとgcc/clangのような無料コンパイラと差異がなくなってしまうため、MSはC++を主流サポートから外してしまって結果的にC++は落ち目となった。
GUIまで統一したら、今度こそC++は完全に見捨てられよう。
そうなったらWindows支配も終わるかもしれないが、プログラマには大混乱が起きる。

503 名前:デフォルトの名無しさん mailto:sage [2020/06/20(土) 13:12:32.66 ID:s3zB5lV1.net]
>>496
GUI統一の動きがあっても、MSはサポートせずに、MingWだけがサポートする可能性がある。
Qtも自分のアドバンテージがなくなるのでサポートするわけなかろうし。
clangはAppleなのだからiOSやMacに支障を来たすためサポートしないだろう。
結果、gccだけがサポートする変な仕様として終わる。

504 名前:デフォルトの名無しさん mailto:sage [2020/06/20(土) 13:18:22 ID:s3zB5lV1.net]
それに、gccには既にGTKがあり、彼らの中では統一規格になっている。
それが彼らの中では世界標準である。

505 名前:デフォルトの名無しさん mailto:sage [2020/06/20(土) 13:30:02 ID:u8LBLBzP.net]
c++ってMSの主流じゃね?
C#の方がおこぼれっぽい

506 名前:デフォルトの名無しさん mailto:sage [2020/06/20(土) 13:33:04.69 ID:aXUmPW3Z.net]
またこのキチガイかよ…
連投する度に頭ん中に新しいお花畑でも作ってんのか?

507 名前:デフォルトの名無しさん mailto:sage [2020/06/20(土) 13:46:04 ID:hTyaQ2gm.net]
すでにお花畑に埋もれているんだろう

508 名前:デフォルトの名無しさん [2020/06/20(土) 16:36:26.09 ID:/Eg/RpNH.net]
カーネルがC#になる。

509 名前:デフォルトの名無しさん mailto:sage [2020/06/20(土) 18:44:23.71 ID:bxmHAIN3.net]
どんどんゴミ化していくWin10の究極奥義か

510 名前:デフォルトの名無しさん mailto:sage [2020/06/20(土) 20:16:12.65 ID:+Wzjt0fO.net]
Win10Update作成者本人もなんで領域がRAWになるかわからないとかいう更新入れたくないよなというか強制だし

511 名前:デフォルトの名無しさん mailto:sage [2020/06/21(日) 00:11:33.65 ID:Rbk+jGca.net]
WSL2だけ欲しいけど2004は怖くて入れられない



512 名前:デフォルトの名無しさん [2020/06/21(日) 09:18:33 ID:KK75twmS.net]
>>476
みんな結局JSON使ってる気がする

513 名前:デフォルトの名無しさん mailto:sage [2020/06/21(日) 09:36:46.75 ID:Pcgk88Ti.net]
XMLは実際に扱ってみればわかるが
自由度が高すぎるが故にパーシングがめっちゃ重い
手作業で変更とかされるとなんだかよくわからない
エラーで読めなくなることがあって難儀することが
まれによくある
タグで括るという無駄の多い構造のため必要な保存
情報のサイズに比してファイルサイズがやたらと
でかくなる
等々ロクなことがない

514 名前:デフォルトの名無しさん mailto:sage [2020/06/21(日) 09:42:48.12 ID:9qR4cBA5.net]
だな

515 名前:デフォルトの名無しさん mailto:sage [2020/06/21(日) 22:56:51.71 ID:WahLA6tX.net]
xmlnsの扱いがめんどい

516 名前:デフォルトの名無しさん mailto:sage [2020/06/22(月) 12:33:37 ID:Uhqw9X2e.net]
boost::property_treeで使える範囲にしとくんだろうね。

517 名前:デフォルトの名無しさん mailto:sage [2020/06/22(月) 12:34:51 ID:pJzisI2b.net]
N4713のD.8にuncaught_exceptionがあるんだけど、理由はなんで?

>>380が言ってたようなRAIIの話で
if (uncaught_exception()) terminate();
else throw system_error{...};
みたいなことすんなってこと?

518 名前:デフォルトの名無しさん mailto:sage [2020/06/22(月) 12:54:18 ID:GQVtnPwK.net]
XMLよりJSONのほうが容量小さくなるが、それでも今作ってるアプリではJSONも容量が大きすぎた
けっきょくCSVに落ち着いたわ

519 名前:デフォルトの名無しさん mailto:sage [2020/06/22(月) 14:19:48.28 ID:fPKoMQb1.net]
>>478
ディスクやネットワークの速度は言語を変えても変わんない
Perlとかの激遅言語だと差が出るかもだけど、数値計算しまくったりするシステムじゃない限りは、言語でものすごい性能の差はでない

520 名前:デフォルトの名無しさん mailto:sage [2020/06/22(月) 17:24:35.40 ID:lBtyUm6f.net]
perlってpythonと比べたら10倍近く速くなかったっけ?

521 名前:デフォルトの名無しさん mailto:sage [2020/06/22(月) 17:37:29.72 ID:KMeLbKpH.net]
時と場合と環境とタイミングとプログラムとコンテキストによる



522 名前:デフォルトの名無しさん [2020/06/22(月) 18:03:57.06 ID:JXDt+qCb.net]
>>484
Tcl/Tk

523 名前:デフォルトの名無しさん [2020/06/22(月) 18:06:29.92 ID:JXDt+qCb.net]
>>498
GTKは糞

524 名前:デフォルトの名無しさん [2020/06/22(月) 18:08:18.53 ID:5VJoOXgM.net]
ティックルティーケーと読むのかと思ったら、ティックルチンコらしいな。
その後出てきたのはグレートチンコと読むんだってな。

525 名前:デフォルトの名無しさん [2020/06/22(月) 18:08:47.46 ID:JXDt+qCb.net]
>>512
JSONも無駄が多過ぎる
C++ならmsgpack

526 名前:デフォルトの名無しさん mailto:sage [2020/06/22(月) 20:55:06.18 ID:jHNWxnNv.net]
>>519
msgpackは直接人が読み書きできないから別物
個人的にサイズが問題になるならmsgpack使うよりzlibとかで圧縮するわ

527 名前:デフォルトの名無しさん mailto:sage [2020/06/22(月) 22:32:34.35 ID:74ajGcn7.net]
>>511
D.8 にも書いてある通り uncaught_exceptions() で同じことができるので、そっちを使えばいい。
わざわざ消してない実装が多いだろうから、たぶんまだしばらく uncaught_exception() も使えちゃうだろうね。
www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0619r4.html#3.7

528 名前:デフォルトの名無しさん mailto:sage [2020/06/22(月) 23:25:55.80 ID:xsRfWdvc.net]
まともな実装なら[[deprecated]]付けてるでしょ

529 名前:デフォルトの名無しさん mailto:sage [2020/06/23(火) 05:40:34.32 ID:oj2a+YQY.net]
>>521
再入可能バージョンを使えってことね
thx

530 名前:デフォルトの名無しさん mailto:sage [2020/06/23(火) 10:14:52 ID:rAKqcV1b.net]
>>520
msgpackはキーが冗長で、結局圧縮が必要なんだよな
テキストであることのメリットを捨てるにはあまりにも中途半端なフォーマット

531 名前:デフォルトの名無しさん mailto:sage [2020/06/23(火) 10:47:11.02 ID:qPEbpbt+.net]
constなメンバー変数ならpublicにしてもいい?



532 名前:デフォルトの名無しさん mailto:sage [2020/06/23(火) 10:56:31.49 ID:rAKqcV1b.net]
後で実装を変更してその変数が不要になったらどうする?
constだからといって不必要に実装を晒していいことにはならない
あくまで教科書的にはこう答えるしかないが、あとはケースバイケースで判断せよ

533 名前:デフォルトの名無しさん mailto:sage [2020/06/23(火) 11:38:38.63 ID:oj2a+YQY.net]
メンバーにconstはあんまり付けないね
static constとかconstexprにするときくらい
書き込みを制限したいなら、それこそ雪駄と下駄で細かく調節できるから

534 名前:デフォルトの名無しさん mailto:sage [2020/06/23(火) 19:20:38 ID:60OAlPGb.net]
個人のコードなら全てstruct、全てpublicで良い
仕事、共同、公開コードなら周りにあわせる

535 名前:デフォルトの名無しさん mailto:sage [2020/06/23(火) 20:12:57 ID:4z1R/L6q.net]
ランボーだな

536 名前:デフォルトの名無しさん mailto:sage [2020/06/23(火) 20:19:23.61 ID:60OAlPGb.net]
全て自分のコードなら
ポリシーがしっかりしていれば何の問題もない

537 名前:デフォルトの名無しさん mailto:sage [2020/06/23(火) 20:22:22.86 ID:rl0ysbNQ.net]
そのポリシーの帰結がpublicかstructかということだと思うが
何も考えてないのと変わらない

538 名前:デフォルトの名無しさん mailto:sage [2020/06/23(火) 20:22:26.04 ID:6iuxc80n.net]
個人的には、publicにするかどうかはユーザーがアクセスする情報であるかどうかで決めればいいと思うけど
外から見える必要があるなら公開すればいいし
変数で公開するのが気持ち悪ければIsなんとかのメンバ関数作るとか
逆にユーザーが触れる必要のない情報ならconstだろうが公開すべきではない

539 名前:デフォルトの名無しさん mailto:sage [2020/06/23(火) 20:24:28.42 ID:60OAlPGb.net]
>>531
初心者的発想

540 名前:デフォルトの名無しさん mailto:sage [2020/06/23(火) 20:24:40.50 ID:rl0ysbNQ.net]
正直プライベートメンバーがヘッダーから丸見えなC++の仕様はいかがなものかといつも思っている

541 名前:デフォルトの名無しさん mailto:sage [2020/06/23(火) 20:25:38.50 ID:CqSQN5Gg.net]
ヘッダ提供している時点でユーザーに見せたくないものではないよね

隠したいならもっと本格的にやるわ



542 名前:デフォルトの名無しさん mailto:sage [2020/06/23(火) 20:25:59.71 ID:60OAlPGb.net]
ヘッダと実体に分けなきゃいけないのが欠点だと思う

543 名前:デフォルトの名無しさん mailto:sage [2020/06/23(火) 20:27:30.62 ID:CqSQN5Gg.net]
でもjavaやc#みたいに一緒くたにされると、見辛いことこの上ない

544 名前:デフォルトの名無しさん mailto:sage [2020/06/23(火) 20:31:20.90 ID:Rp8Vr+Lo.net]
>>537
テンプレートは嫌い?

545 名前: mailto:sage [2020/06/23(火) 20:32:52.52 ID:sbDHiXI+.net]
>>536
それが分割コンパイルというものなのでは?

546 名前:デフォルトの名無しさん mailto:sage [2020/06/23(火) 20:34:09.42 ID:CqSQN5Gg.net]
templateでも長くなってきたら実装分けるだろ
普通はヘッダからさらにincludeするだけだけど、場合によっては分割コンパイルもする

547 名前:デフォルトの名無しさん mailto:sage [2020/06/23(火) 21:15:05.81 ID:K4mymhGD.net]
>>537
そのためだけにインターフェース作ったりしてる

548 名前:デフォルトの名無しさん mailto:sage [2020/06/23(火) 21:35:01 ID:oj2a+YQY.net]
数ヶ月前の自分て他人だかんな
なんでこんなアホなことしてんだとムカッ腹立ったりする

549 名前:デフォルトの名無しさん mailto:sage [2020/06/23(火) 23:28:42.38 ID:Rp8Vr+Lo.net]
>>539
分けるべき時は分ける
分けたくない時もある
その自由が無い

550 名前:デフォルトの名無しさん mailto:sage [2020/06/23(火) 23:32:03.90 ID:0n9/qQGG.net]
>>540
分けるだろって
分けるべき時と分けないべきときがある

551 名前:デフォルトの名無しさん mailto:sage [2020/06/24(水) 05:30:51 ID:fimjTN9U.net]
コンパイルが重いtemplateはよく分けるな



552 名前:デフォルトの名無しさん mailto:sage [2020/06/24(水) 07:09:07 ID:MMfROoXz.net]
明示的な具現化?

553 名前:デフォルトの名無しさん mailto:sage [2020/06/24(水) 07:16:09 ID:+7c5yhaJ.net]
>>540
ヘッダからインクルードするだけって
まさかそれで実装を分けたと思ってる?

554 名前:デフォルトの名無しさん mailto:sage [2020/06/24(水) 07:24:43.03 ID:5K2T8Wb8.net]
標準ライブラリが分けられてないのに
どうやって分けるんだよ

使うテンプレートパラメーターがあらかじめ決まってないと実装を分けられないはずなんだが

実装を分けるってのは
コンパイル単位を分けるってことな

555 名前:デフォルトの名無しさん mailto:sage [2020/06/24(水) 08:16:05 ID:iulgQyvw.net]
C++のライブラリを更新するとき、新たなメンバ変数を追加するとメンバへのオフセットが
ずれてバイナリ互換性がなくなるといいますが、これを無理やりどうにかする方法って
ありますかね?

理屈上は、オフセットに影響を与えないメモリ位置に各インスタンスのメンバ変数を保持し、
参照、破棄等適宜すればいいと思いますが... ?? もしこれが可能ならば具体例とかを見たい
のですが、うまく探せませんでした。

556 名前:デフォルトの名無しさん mailto:sage [2020/06/24(水) 08:46:11 ID:MMfROoXz.net]
メンバ変数をprivateにして雪駄と下駄を用意する
メンバ変数へのアクセスを常に関数経由とすることで
オフセット等の物理的な条件で互換性が失われることを防げる

つーか、ソースコードを変更してるのにバイナリを更新しないのはおかしいだろ
Makefileのバグを疑うべき

557 名前:デフォルトの名無しさん mailto:sage [2020/06/24(水) 09:35:30 ID:OmEqu4Is.net]
>>549
普通に追加して再コンパイルさせりゃいいという話じゃなさそうなのはわかるけど
「無理やり」が暗に指していそうな制約も「どうにかする」の指す要件もわからない。

558 名前:デフォルトの名無しさん mailto:sage [2020/06/24(水) 11:11:37.90 ID:RdcHMRga.net]
osの違いを吸収してるようなもんを作ってる場合
何でもフルチンで触らせるとそもそもの意味がなくなるわな

559 名前:デフォルトの名無しさん [2020/06/24(水) 11:43:22.15 ID:6+kkBVmV.net]
>>549
python の C module の造り方

560 名前:デフォルトの名無しさん mailto:sage [2020/06/24(水) 12:08:38.76 ID:irp07WaX.net]
>>549
COMみたいに、methodだけを外に出して、データは直接は外に出さないようにすればいい。
interfaceの考え方。

561 名前:デフォルトの名無しさん mailto:sage [2020/06/24(水) 12:13:38.23 ID:irp07WaX.net]
>>554
追加。
Win32APIなどの手法を真似る方法もある。
OSの内部構造が修正になってもAPIは互換性を保ててる。
やりとりのための構造体は先頭の方にバイト数を入れるメンバが用意されていて、
以後のメンバの後世が変更になった場合、構造体の末尾に追加していっている。
先頭にバイト数を入れることで、個々の構造体が変化したかだけの影響を受けるため、
ライブラリ全体のバージョンが変化しても全ての関数の仕様を入れ替える必要がなくなっている。



562 名前:デフォルトの名無しさん mailto:sage [2020/06/24(水) 12:20:34.60 ID:sRKtYS7k.net]
>>549
pimplでぐぐれ

563 名前:548 mailto:sage [2020/06/24(水) 16:28:24 ID:iulgQyvw.net]
皆さんどうもです。状況は (以下、ライブラリ -> lib アプリ -> app)

lib v1.0 リリース
app v1.0 が lib v1.0 をリンクしてビルド、リリース
lib v1.1 リリース(メンバ追加) <- 今ココ
app v1.0 クラッシュ

というわけで lib v1.1 を出すとき小細工して(でもメンバ変数相当を追加したい)
app v1.0 のクラッシュを防げないか、ということです。
とりあえず lib v1.0 には impl メンバはないです。

564 名前:デフォルトの名無しさん mailto:sage [2020/06/24(水) 16:41:30.01 ID:nJwAdMhi.net]
>>556
pimplでバイナリ互換は保証できないよ

565 名前:デフォルトの名無しさん mailto:sage [2020/06/24(水) 16:48:55.87 ID:nJwAdMhi.net]
>>557
インスタンスをnewしてるのがアプリ側だったら
メンバ追加はほぼ絶望的
無理にやるとしたらメンバのアライメントの隙間に数バイトつっこむぐらい

バイナリ互換とる場合はIFはCにするのが定石だよ
(C++でやるなら上にあるとおりcomとかになって複雑になる)
よくわかってないみたいだから頭下げてアプリにビルドしなおしてもらいな

566 名前:デフォルトの名無しさん mailto:sage [2020/06/24(水) 17:26:36.53 ID:L0Gy/Feu.net]
よく分からん
libは兎も角、appはソースあるのが普通じゃね
リンクしなおしている時点で、コンパイルからし直すのも出来るはず

ヘッダのバージョン合ってなきゃそりゃ転けるわ

567 名前:デフォルトの名無しさん mailto:sage [2020/06/24(水) 18:00:35.46 ID:irp07WaX.net]
>>559
newの変わりに、仮想関数のCreateObject()というメソッドを呼ぶ方式があるね。

568 名前:デフォルトの名無しさん mailto:sage [2020/06/24(水) 18:18:52.62 ID:irp07WaX.net]
1. Pimplの場合:
class CXxx {
public:
 (メソッド群)
protected:
 CImpl *pImpl;
};

2. 別解
使う側 :
class CBase {
public:
 virtual CBase *CreateObject();
 (メソッド群)
};
実装する側 :
class CDerived : public Base {
public:
 CBase *CreateObject(); // 実際にはCDeriveの先頭アドレスをCBase*にcastしたものを返す。
 (データメンバ群)
};

569 名前:デフォルトの名無しさん mailto:sage [2020/06/24(水) 18:26:04.51 ID:OmEqu4Is.net]
>>562
その別解とやら、 CBase のインスタンスを得るためにはまず CreateObject() を呼び出すための
CBase のインスタンスが必要になってて、無理じゃね?

570 名前:デフォルトの名無しさん mailto:sage [2020/06/24(水) 18:35:10.44 ID:fimjTN9U.net]
>>548
プロジェクトの範囲内ではテンプレートパラメータが数種類に限られることも多いからそういう時には明示的インスタンス化が利用できるよ

571 名前:デフォルトの名無しさん mailto:sage [2020/06/24(水) 18:38:06.77 ID:q+GJbQMN.net]
>>550
ライブラリ
って知らない?

>>549
バイナリをいろいろなアプリで今後使う予定ならなるべく実装を隠そう
内部で実体の構造体なりクラスなりをnewで作って
外部に公開するクラスは
単にその内部クラスとのインターフェースだけ行う
後から機能を追加出来るように
function(command, param1, param2)
みたいな関数も用意しておく



572 名前:デフォルトの名無しさん mailto:sage [2020/06/24(水) 18:57:23.17 ID:irp07WaX.net]
>>563
言われてみれば。正しい別解の1つは、
class CXxx {
public:
 static CXxx *CreateObject();
 (メソッド群)
};
だね。

573 名前:デフォルトの名無しさん mailto:sage [2020/06/24(水) 18:59:39.89 ID:wsyC1+3+.net]
>>563
なにいってんだ
返すのはポインタだから実体必要ないだろ

574 名前:デフォルトの名無しさん mailto:sage [2020/06/24(水) 19:01:25.53 ID:QJ36Pf9n.net]
>>567
仮想関数呼ぶのには当然同じクラスの実体が必要

cloneなら仮想関数で実装できる

575 名前:デフォルトの名無しさん mailto:sage [2020/06/24(水) 19:08:20.34 ID:irp07WaX.net]
>>566
すまん、こうでなくてはならなかった:
使う側:
class CBase {
public:
 static CBase *CreateObject();
 (メソッド群)
};
実装側:
class CDerived : public Base {
public:
 (データメンバ群)
};
CBase *CBase::CreateObject() {
 return new CDerived;
}

576 名前:デフォルトの名無しさん mailto:sage [2020/06/24(水) 19:08:44.81 ID:wsyC1+3+.net]
>>568
実体のあるクラスをアップキャストすれば必要ねぇだろバカか

577 名前:デフォルトの名無しさん mailto:sage [2020/06/24(水) 19:17:24 ID:QJ36Pf9n.net]
何が目的なんだか
その派生クラスのインスタンスを作りたいから、CreateObject呼ぶんだろ?
呼ぶ前に派生クラスのインスタンスが必要って、鶏と卵じゃないか

578 名前:デフォルトの名無しさん mailto:sage [2020/06/24(水) 19:19:01.22 ID:ML+2IMf2.net]
こっそりlib差し替えとか後が怖いなーと思いましたw

579 名前:デフォルトの名無しさん mailto:sage [2020/06/24(水) 19:24:18.50 ID:q+GJbQMN.net]
>>557
今あるメンバ変数の1個をポインタに置き換える
ここに色々なデータが入った構造体のポインタを置く
これで互換性を保てる

580 名前:デフォルトの名無しさん mailto:sage [2020/06/24(水) 19:27:44 ID:QJ36Pf9n.net]
ヘッダにオブジェクトの中身を読み書きするinline関数有ったら危険
inlineじゃなくてもtemplateだとヤバイ

まあtemplateで実体生成されないように実装分離してたらセーフかな

581 名前:デフォルトの名無しさん mailto:sage [2020/06/24(水) 19:29:28 ID:q+GJbQMN.net]
当然外から直接アクセスする変数は変えたらダメ



582 名前:デフォルトの名無しさん mailto:sage [2020/06/24(水) 19:42:58 ID:q+GJbQMN.net]
ヘッダは基本変えない
不便ならポインタに置き換える変数1個だけ型と名前を変える

あとはライブラリ側のコードのみ変更

アクセス関数を後から増やすなら
クラスのポインタとパラメータをパラメータにしたグローバル関数にする

多少使いづらいが
互換性を考えて設計しなかったツケ

583 名前:デフォルトの名無しさん mailto:sage [2020/06/24(水) 19:48:51.80 ID:e6Wuxio/.net]
>>572
巷のOSとか、定期アップデートがかかるときにこういうので悩んだりしないんですかね?

>>573
おお確かにそれでいいんですかね?

まあ今後新たにライブラリを公開することがあるなら最初から気をつけようってことでw []
[ここ壊れてます]

585 名前:デフォルトの名無しさん mailto:sage [2020/06/24(水) 21:43:18.10 ID:N310/pVU.net]
拡張した方は別の型(派生クラス)じゃあかんのか。

586 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 09:10:26.77 ID:TVNlb9r7.net]
>>565
知ってます
当たり前でしょそんなこと!

587 名前:デフォルトの名無しさん mailto:sage [2020/06/25(Thu) 10:19:29 ID:X3nsKEKb.net]
>>573
それは、Pimpl方式だけど、それより、>>569の方が書きやすいし、効率も良い。

588 名前:デフォルトの名無しさん mailto:sage [2020/06/25(Thu) 10:26:19 ID:lze6mCYp.net]
>>580
一から書き直せる条件じゃないんのおわかり?
だいたい >>573 をpimplとは呼ばないでしょ
置き換えないメンバはそのまま見えてるわけだから

あとpimpl論議は飽きた

589 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 12:53:57.93 ID:yb+enRFi.net]
>>580
互換性を保つのが前提だから
ヘッダは基本今のまま変更不可

っていう前提条件を理解してから書いてね

590 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 18:36:00.50 ID:KZb+gCmD.net]
>>581
書き直せないんじゃ、危険だけど>>573くらいしかないんじゃない?

そんな暗黒魔法使うくらいならapp1.0を再コンパイルする方法を考えるけどね。

591 名前:デフォルトの名無しさん mailto:sage [2020/06/25(Thu) 18:41:27 ID:/eSpQqPW.net]
ヘッダは変更するの前提じゃないの?
バイナリ互換させるの前提なのだから



592 名前:デフォルトの名無しさん mailto:sage [2020/06/25(Thu) 19:04:50 ID:X3nsKEKb.net]
「メンバ変数の一個をポインタに置き換える」
こともヘッダを変更するのが必須になると思うのだが。

593 名前:デフォルトの名無しさん mailto:sage [2020/06/25(Thu) 19:07:11 ID:TznTPNyN.net]
>>585
必須じゃない

594 名前:デフォルトの名無しさん mailto:sage [2020/06/25(Thu) 19:13:33 ID:g2od3l7G.net]
実装側でアクロバットするのは無理やりバイナリ互換させる旧バージョン対応の方で良い

新バージョンの中身にあわせてヘッダを更新しておかないと、負の遺産が延々と続くことになる

595 名前:デフォルトの名無しさん mailto:sage [2020/06/25(Thu) 19:14:44 ID:L+/QiPNH.net]
>>585
やり方次第。
privateのint変数やポインタ変数があるなら、キャストしてぶちこめばいい。
他の変数も似たようなもん。

596 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 19:16:18.79 ID:X3nsKEKb.net]
>>588
ええ!!??

597 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 19:27:44.15 ID:aCPUEpAO.net]
バイナリ互換をはじめてかんがえた
って感じの人が多くて驚く

598 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 19:27:52.99 ID:g2od3l7G.net]
pointerに置き換えたとして、指す先の実体の管理はどうするんだ
元々デストラクタが外部定義されてないと、デフォルトのデストラクタ呼び出しはinline化されてしまっている

599 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 19:32:44.29 ID:aCPUEpAO.net]
なんでインラインだと思ったんだか

600 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 19:34:45.97 ID:aCPUEpAO.net]
ライブラリ作ったこと無いのかな?

601 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 19:36:15.68 ID:g2od3l7G.net]
いや、はじめからバイナリ互換させる前提で設計したライブラリでもない限り、小手先の対応でなんとかなる場面は物凄い限られるよ



602 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 19:38:38.17 ID:aCPUEpAO.net]
>>594
それは互換性を保つ技術が無いから

603 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 19:41:06.01 ID:aCPUEpAO.net]
メモリアラインメント調整等で発生する隙間を集めて変数として使う
っていう手もある

データ構造互換だとよくやる手法

604 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 19:41:55.04 ID:L+/QiPNH.net]
>>591
そんなもん、GC実装して無理やりゴミ集めするしか無いだろ。
最後はアプリ終了時にOSが処分してくれることを期待するしかない。

605 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 19:42:42.30 ID:g2od3l7G.net]
バイナリ互換前提で開発されていないから、問題が出ているんじゃないの?

appがコンパイルされた時点で、デストラクタやらコピコンやら代入やらをすべて明示的に外部定義していないと、コード中で必要に応じてデフォルトが呼ばれて、当然inline化もされてしまう

606 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 19:43:40.85 ID:jUSiql3P.net]
>>592
必ずインライン化されてるとは言えないけど、可能性はあるよね?

結局のところ具体的なコード要件を >>549 が言わない限りは不毛な気もする。

607 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 19:44:07.37 ID:aCPUEpAO.net]
>>598
>>593

608 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 19:45:52.88 ID:aCPUEpAO.net]
ライブラリを作った事がないヤツが
ライブラリの互換性についてアドバイスしようとしてて笑える

609 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 19:47:42.56 ID:g2od3l7G.net]

ライブラリ作ったことあるからこその内容だろうに
GCするとか、リークしたままOSに回収させるとかそれこそライブラリとしてあり得ない対応だろう

610 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 19:51:39.44 ID:aCPUEpAO.net]
なんでデストラクタがインラインだと思うんだ?

611 名前:デフォルトの名無しさん mailto:sage [2020/06/25(Thu) 19:55:22 ID:g2od3l7G.net]
デフォルトだとinlineのデストラクタが生成されるのがc++の仕様だろ
じゃないと単なるプレーンな構造体でもデストラクタの呼び出しするはめになる



612 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 20:01:17.97 ID:aCPUEpAO.net]
クラスをライブラリ化するのにメンバ関数がインライン?

ご冗談を

613 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 20:02:21.68 ID:aCPUEpAO.net]
デストラクタがインラインなら>>596

614 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 20:05:18.94 ID:g2od3l7G.net]
バイナリ互換想定してないなら、inlineしない方が稀じゃね
全部外部定義だと、高速化の妨げになるじゃないか
世の中のc++用ライブラリを見てみれば良いさ
inlineが無いどころかheader onlyが幅を利かせている

615 名前:デフォルトの名無しさん mailto:sage [2020/06/25(Thu) 20:08:52 ID:g2od3l7G.net]
alignmentサイズの隙間に入れたところで、コピーの時にコピーされるかどうかも不明
と言うか、単体だとまずされない
まあコピーも外部定義されていれば置き換え可能だけど

616 名前:デフォルトの名無しさん mailto:sage [2020/06/25(Thu) 20:10:03 ID:L+/QiPNH.net]
>>600
そもそもバイナリ互換を考慮していないライブラリを今さら何とかしようとするウンコな発想ありきだからな。

まともなライブラリ実装者なら
「そんなクソとっとと便所に流してマトモなもの作り直せ」
としか言わんわ。

617 名前:デフォルトの名無しさん mailto:sage [2020/06/25(Thu) 20:11:42 ID:Y+MR3z5H.net]
>>607
テンプレートだろそれ

618 名前:デフォルトの名無しさん mailto:sage [2020/06/25(Thu) 20:13:29 ID:Y+MR3z5H.net]
>>608
コピーもインライン前提か?

619 名前:デフォルトの名無しさん mailto:sage [2020/06/25(Thu) 20:14:36 ID:g2od3l7G.net]
inlineじゃないtemplateのヘッダオンリーでも、バイナリ互換保つの無理だよね
例えinline化されてなくても、各obj内で実体化されたtemplate関数が同一じゃないと何が起こっても文句言えない

620 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 20:15:41.12 ID:g2od3l7G.net]
明示的なinlineもだけど、定義せずコンパイラに任せた場合デフォルトで出来るものはinline扱いになる

621 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 20:16:21.51 ID:Y+MR3z5H.net]
なんでobj?
ライブラリっていってるんだからlibだろ



622 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 20:18:38.89 ID:g2od3l7G.net]
libはobjの集合だろうに

623 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 20:19:42.46 ID:Y+MR3z5H.net]
インライン混じりのライブラリ
ならメンバ変数を増やすのを心配する以前だろ

問題が変わってる

624 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 20:27:59.07 ID:Y+MR3z5H.net]
>>612
だからヘッダは基本変更しない

625 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 20:29:04.78 ID:iE0yhaVV.net]
どうしても必要なことなら、
ライブラリの中にスタティックな連想配列置いて、thisアドレスをキーにして追加したいメンバ変数引くようにしたら?
トリッキーでないし確実に動く

626 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 20:29:54.44 ID:g2od3l7G.net]
コピーされなきゃ良いよね

627 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 20:30:23.57 ID:g2od3l7G.net]
vectorで持たれてても再配置されたら困るし

628 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 20:32:18.93 ID:Y+MR3z5H.net]
>>618
インラインかもよ
コンストラクタもデストラクタもコピーも
追加したメンバ変数へのアクセスも

629 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 20:34:29.24 ID:Y+MR3z5H.net]
何の互換性を保ちたいのかわからなくなってきた

630 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 20:42:06.05 ID:N8mY4JDD.net]
同感

631 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 21:13:19.28 ID:Y+MR3z5H.net]
ライブラリを使う(一部の)コードはコンパイル済みでリコンパイル出来ない

コンパイル済みのコード内で使ってるクラスのメンバ変数を追加したい

当然
クラスのサイズは変えられないし
コンパイル済みのコード内の(インライン展開されてる)関数も変えられない

どの関数がコンパイル済みコード内にあって
どの関数がライブラリ内にあるかは不明



632 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 21:14:06.17 ID:Y+MR3z5H.net]
こんな感じ?

633 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 21:25:58.94 ID:GV91Na/E.net]
ほとんど読んでないけどID:aCPUEpAOとID:Y+MR3z5Hがド素人なのはわかった

634 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 21:27:27.39 ID:Y+MR3z5H.net]
はいはいwww

635 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 21:32:36.99 ID:GV91Na/E.net]
ヘッダの変更無しにどうやって新しい機能追加すんだよ

636 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 21:39:56.91 ID:Y+MR3z5H.net]
機能を追加したいなんて言ってたか?

637 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 21:40:05.85 ID:GV91Na/E.net]
と思ったら>>549が前提なのか、すまん
とりあえずインスタンスそのままで扱うのは無理じゃね
ユーザー側が一貫してポインタで扱うのは必須だと思う

638 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 21:46:21.80 ID:Y+MR3z5H.net]
なにそのド素人発言

639 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 21:47:56.11 ID:GV91Na/E.net]
>>611,614,616

640 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 21:49:41.84 ID:GV91Na/E.net]
インスタンスで扱ってるなら暗黙定義された関数の動作が変わる可能性くらいすぐ気づけやド素人が

641 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 21:58:47.71 ID:W+LR7rOf.net]
ポインタで扱うとインライン関数がリコンパイル無しで変えられるって?



642 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 22:01:17.65 ID:W+LR7rOf.net]
ライブラリなんだから
メンバ関数は全てライブラリ側で実装するだろ普通

テンプレートとか別途リンクが不要なことが売りなライブラリならともかく

何のためのライブラリだか

643 名前:632 mailto:sage [2020/06/25(木) 22:05:49.15 ID:Q7o8gz5q.net]
>>634
ヒント:仮想関数、コピー不可、Factory

644 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 22:06:38.78 ID:Q7o8gz5q.net]
てかこの要件だと>>618ですでに答え出てる気がする

645 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 22:06:48.48 ID:W+LR7rOf.net]
案を出せない人間が何を言っても負け犬の遠吠え

646 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 22:09:27.67 ID:W+LR7rOf.net]
>>637
>>573に対してメリットあるか?

647 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 22:11:36.08 ID:W+LR7rOf.net]
>>636
あれ?
もしかして
互換性保持した修正はギブアップで
依頼者の要件を無視した案を言ってる?

648 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 22:14:20.52 ID:Q7o8gz5q.net]
>>638
っ[鏡]
てかID変えたんか?

>>639
>>574

649 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 22:15:15.45 ID:Q7o8gz5q.net]
>>640
>>634に対して反論したんだが
すり替えてんじゃねーよ

650 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 22:16:59.09 ID:W+LR7rOf.net]
外部から直接アクセスしない変数を置き換えるに決まってるたろ

連想配列だと
初期化順とかスレッド安全とかパフォーマンスとか
色々と心配だねえ

651 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 22:20:39.99 ID:lze6mCYp.net]
>>637
どこが答えだよ
>>618 は無理だよ
アプリ側でnew/deleteされたことをライブラリ側はトラッキングできない
アプリ側でnew/deleteされてないのだったら問題になってない
アプリに手を加えていいのだったらバイナリ互換考えなくていい



652 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 22:20:56.12 ID:W+LR7rOf.net]
>>642
>>633はお前だろ?

653 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 22:26:37.67 ID:Q7o8gz5q.net]
>>644
新しいthis来たら新しく作るだけだろ
deleteに対してはどうにもできんけど

>>645
馬鹿かお前は
ポインタで扱う前提に乗っかったのはお前だろ
バカにしようとして自爆したのに逆ギレか

654 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 22:26:45.54 ID:W+LR7rOf.net]
コピーを使わない、もしくはインラインじゃないなら>>596

コンストラクタ、デストラクタ、コピーがインラインじゃないなら
>>573で良い

new deleteはアプリ側でもライブラリ側でも問題ない

655 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 22:29:26.54 ID:Q7o8gz5q.net]
何言ってんだこいつ

656 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 22:29:51.27 ID:W+LR7rOf.net]
コンストラクタはインラインでも>>573で問題ないね

657 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 22:35:32.05 ID:W+LR7rOf.net]
>>644より>>573の方が良いね
隙間があってコピーで問題なければ>>596

658 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 22:36:49.66 ID:W+LR7rOf.net]
>>644じゃなかった
連想配列案

659 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 22:47:52.28 ID:Q7o8gz5q.net]
インラインじゃないならって、普通コンパイルオプションやnoinlineで指定してない限り、
実装が見えているメンバ関数は全てインライン展開はされうるんだぞ

そんな厳しい前提がOKなら>>646で言ったdeleteの問題だって対処できる

660 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 22:50:51.97 ID:W+LR7rOf.net]
>>573>>618
デストラクタがインラインだとダメなのは同じ
コピー時の制約も同じ

速度、スレッド安全性、初期化順などの心配事に関しては>>573の勝ち

>>573は外部からアクセスしていないポインタサイズの変数の存在が条件

661 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 22:54:30.29 ID:W+LR7rOf.net]
>>652
ヘッダにない関数はインラインにしようがない



662 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 22:59:14.54 ID:W+LR7rOf.net]
>>573>>596のスペースが全く無いなら他の方法を考えるしかないけど

663 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 23:01:53.27 ID:W+LR7rOf.net]
デストラクタ問題に対応出来るのは今のところ>>596だけ

664 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 23:05:32.49 ID:Q7o8gz5q.net]
暗黙定義のものが一つも無ければね
(=ヘッダに宣言はあるが実装は見えないものだけ

てか別に>>618じゃないといけないとは言ってないが
>速度、スレッド安全性、初期化順
速度が必要とか一言も書いてないし
スレッド安全性て、連想配列使うのはライブラリ内だけなんだからライブラリ側で対処すればいいだけ

>>656
ユーザーが使ってない変数や領域に新しいメンバを含む構造体へのポインタを入れる案も
根本的には連想配列案と一緒だよ、デストラクタが非インラインでなければ解放できないぞ

まぁ今ある情報だけで議論してもどうにもならんが

665 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 23:06:38.16 ID:Q7o8gz5q.net]
>>657の最初は>>654

666 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 23:11:48.74 ID:W+LR7rOf.net]
>>657
>>596を勘違いしてる
ポインタを入れるわけじゃない
隙間に変数そのものを入れる

667 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 23:23:27.92 ID:W+LR7rOf.net]
コンテナやスマポなど、コピーやデストラクタで処理される物の中身を少し大きくするとか
close()みたいな最後に必ず呼ばれる関数があればそこに入れ込むとか
中身がわかればもっと別の案も出るかも

668 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 23:30:07.30 ID:W+LR7rOf.net]
>>657
速度が必要と書いてなければ速度無視が前提って...
なかなか衝撃発言ですねえ

C++なんだから組み込みのチープ環境かもしれないし
リアルタイム処理かもしれないし
もしかしたらISR内部かも
(ISRならnewも問題になるか)

速度がどうでもいい用途でいまだにC++を使うって
どんな業界かな?

669 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 23:34:58.25 ID:Q7o8gz5q.net]
ほんとにド素人だな・・・呆れた

670 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 23:41:46.09 ID:W+LR7rOf.net]
負け宣言?
雑魚が

671 名前:はちみつ餃子 mailto:sage [2020/06/25(木) 23:52:04.02 ID:Dxq2c9AW.net]
>>662
どーしろと? (駄洒落)



672 名前:デフォルトの名無しさん mailto:sage [2020/06/26(金) 07:52:12 ID:UtOMuHDg.net]
不変のアブストラクトクラスを作っておいて
実装はそこの派生クラスでやり
使用者はポインタで使う

673 名前: mailto:sage [2020/06/26(金) 19:50:48.55 ID:9IxUvn/4.net]
>>664
冴えてる!
いつもすてきなはちみつさんですね!

674 名前:デフォルトの名無しさん mailto:sage [2020/06/26(金) 20:05:18.50 ID:jgcbTaF5.net]
糞コテ集合

675 名前:デフォルトの名無しさん mailto:sage [2020/06/26(金) 22:39:47 ID:2sQMfeSo.net]
あと蟻人間とかいうやつが揃えばジャックポット

676 名前:デフォルトの名無しさん mailto:sage [2020/06/26(金) 22:59:40.41 ID:ReyCZ0Ra.net]
よーし、みんな呼んじゃうゾ

void君、rubyガイジ、jquery房ーっ

677 名前:デフォルトの名無しさん mailto:sage [2020/06/27(土) 00:11:14.27 ID:rOaH6R8n.net]
蟻ははちみつが大好き。
ハチとアリは同属。

678 名前:デフォルトの名無しさん mailto:sage [2020/06/27(土) 03:40:34.85 ID:W+OG+j+5.net]
   ∩___∩         |
   | ノ\     ヽ        |
  /  ●゛  ● |        |
  | ∪  ( _●_) ミ       j
 彡、   |∪|   |        J
/     ∩ノ ⊃  ヽ
(  \ / _ノ |  |
.\ “  /__|  |
  \ /___ /

679 名前:デフォルトの名無しさん mailto:sage [2020/06/27(土) 03:55:34 ID:aqzZKmXR.net]
心底どうでもいい

680 名前:デフォルトの名無しさん mailto:sage [2020/06/27(土) 10:40:14 ID:rOaH6R8n.net]
片山右京

681 名前:デフォルトの名無しさん mailto:sage [2020/06/27(土) 13:08:47.90 ID:5dDNakqG.net]
杉下右京



682 名前:デフォルトの名無しさん mailto:sage [2020/06/27(土) 14:16:45.56 ID:rOaH6R8n.net]
博文

683 名前:デフォルトの名無しさん mailto:sage [2020/06/27(土) 22:55:32.89 ID:XmSaDv1W.net]
今時のmodern c++で、マルチスレッドやるにはどうすればいいでしょうか。とりあえず今はC++17でコンパイルしてますが
1.c++20のコルーチンとコールチンライブラリを使う
2.固定スレッド数のスレッドプールなら簡単に実装できるので自分で実装、もしくは素敵なライブラリがある?
3.std::thread,std::asyncでいいや

684 名前:蟻人間 mailto:sage [2020/06/27(土) 22:59:52.80 ID:4SruWd+v.net]
>>676
std::threadとOpenMPが基本かな。

685 名前:デフォルトの名無しさん mailto:sage [2020/06/27(土) 23:00:22.36 ID:XmSaDv1W.net]
とりあえず、MSVCを使ってます
1は時期尚早?
2はMSVCだとTask Parallel Libraryがあるけど、プライオリティキューを使いたいとなるとやっぱ自前?
3はね
皆さんはどんな感じでしょうか

686 名前:デフォルトの名無しさん mailto:sage [2020/06/27(土) 23:06:40.51 ID:TsX0h7IG.net]
マルチスレッドやる
がわからん

何をしたいの?

687 名前:デフォルトの名無しさん mailto:sage [2020/06/27(土) 23:10:16.30 ID:XmSaDv1W.net]
タスクの実行を(優先順位付きで)スケジュールしたり、キャンセルしたりしたいです
非同期処理?
なんてイエバいいのだろう

688 名前:デフォルトの名無しさん mailto:sage [2020/06/27(土) 23:12:59.91 ID:TsX0h7IG.net]
環境は?

689 名前:デフォルトの名無しさん mailto:sage [2020/06/27(土) 23:14:55.69 ID:XmSaDv1W.net]
MSVCのWindowsアプリです

690 名前:デフォルトの名無しさん mailto:sage [2020/06/27(土) 23:24:28.13 ID:TsX0h7IG.net]
MFC
Windows API
std::thread

どれでも出来るけど

求めるものは?
性能?作りやすさ?移植性?

691 名前:デフォルトの名無しさん mailto:sage [2020/06/27(土) 23:26:07.41 ID:XmSaDv1W.net]
まぁ、windowsにはwin32でthread pool apiがあったり、ATLでCThreadPoolクラスみたいのがあるっぽいんですが、昔より今時の方法で..

性能はあんま気にしてません
作りやすさですね



692 名前:デフォルトの名無しさん mailto:sage [2020/06/27(土) 23:26:45.37 ID:TsX0h7IG.net]
普通に自作すれば?
仕様を好み通りに出来る

693 名前:デフォルトの名無しさん mailto:sage [2020/06/27(土) 23:29:23.19 ID:XmSaDv1W.net]
性能はあんま気にしてませんが、テスト的にstd::threadで今は実装してますが、セマフォなりで全く制御してないのでCPU使用率がはねあがって、セマフォで制御するくらいならスレッドプールくらいは導入したいなと

694 名前:デフォルトの名無しさん mailto:sage [2020/06/27(土) 23:35:09.74 ID:XmSaDv1W.net]
>>685
優先順位付きとかやると色々自前が楽かなぁと思ってたんですが、やっぱ自前ですか
ありがとうございます

695 名前:デフォルトの名無しさん mailto:sage [2020/06/27(土) 23:51:55.88 ID:IY07Q1dO.net]
msvcならasync使えばthread pool使われてたような
async|deferredでは問題ないけど、asyncのみだと仕様的にアウトっぽいから将来的に修正されるかもしれんが

696 名前:デフォルトの名無しさん mailto:sage [2020/06/27(土) 23:55:27.13 ID:TsX0h7IG.net]
プライオリティキュー
自体を既に使ってるなら
待つ仕組みだけ追加すれば良いのでは?

697 名前:デフォルトの名無しさん mailto:sage [2020/06/27(土) 23:58:18.31 ID:TsX0h7IG.net]
while (1){
イベント待ち
イベントクリア
キューから取得
処理
}

----

キューに追加
イベントセット

698 名前:デフォルトの名無しさん mailto:sage [2020/06/28(日) 00:14:46.55 ID:En8ZMxKR.net]
>>688
そんなこんなこと書いてありますが、std::asyncってdetachできないですよね?
こういう作りがいいのか知りませんが、基本UIスレッドから非同期処理実行して完了したらWinAPIのPostMessageで完了通知してます
ので、std::threadみたくdetachしたいのです

>>690
プライオリティキューはこれから実装するんですが、単にstd::set使ってlessパラメーター指定すればできあがり?とはいかない?

699 名前:デフォルトの名無しさん mailto:sage [2020/06/28(日) 00:19:31.12 ID:BWJrAYP0.net]
while (1){
イベント待ち
イベントクリア
while (キューから取得){
処理
}
}

----

キューに追加
イベントセット

700 名前:デフォルトの名無しさん mailto:sage [2020/06/28(日) 00:21:59.78 ID:BWJrAYP0.net]
こうだった

std::set / less
同じプライオリティがダブらないならこれでも

701 名前:デフォルトの名無しさん mailto:sage [2020/06/28(日) 00:25:52.98 ID:En8ZMxKR.net]
プライオリティはダブルんですけど、要素がプライオリティじゃなくて、プライオリティと例えば実行するstd::functionのペアで、このペアオブジェクトがダブらないはず



702 名前:デフォルトの名無しさん mailto:sage [2020/06/28(日) 00:27:09.32 ID:h/QEc5EX.net]
お前は人の相談に乗れるレベルなのか?

703 名前:デフォルトの名無しさん mailto:sage [2020/06/28(日) 00:33:11.03 ID:BWJrAYP0.net]
>>694
同じfunctionが複数セットされても
実行が1回になってもいいなら
それでいいんじゃない?

704 名前:デフォルトの名無しさん mailto:sage [2020/06/28(日) 00:42:37.03 ID:En8ZMxKR.net]
>>696
unordered系しか本格的に使ったことしかないんですけど
std::pair使わずに独自ペアオブジェクトじゃだめそうだな..
std::pairをstd::shared_ptrでラップすればOKそうに見える

705 名前:デフォルトの名無しさん mailto:sage [2020/06/28(日) 00:43:43.83 ID:BWJrAYP0.net]
lessもプライオリティとfunctionのペアってことね

同じプライオリティの処理が
キューにセットした順にはならなくなるけど

個人的には
キューにセットした回数分実行するために
multisetにしたい

706 名前:デフォルトの名無しさん mailto:sage [2020/06/28(日) 00:46:39.83 ID:BWJrAYP0.net]
プライオリティが多くないなら
ブライオリティ別のdequeにすれば
公平性は保たれるし比較も不要

707 名前:デフォルトの名無しさん mailto:sage [2020/06/28(日) 00:46:53.66 ID:En8ZMxKR.net]
multisetですか、ちょっと調べてみます

708 名前:デフォルトの名無しさん mailto:sage [2020/06/28(日) 00:56:32.40 ID:En8ZMxKR.net]
あー。multisetでいいですね。それにします。
ありがとうございます

709 名前:デフォルトの名無しさん mailto:sage [2020/06/28(日) 06:20:46.65 ID:vMsHglGs.net]
ここまでintel TBBなし

710 名前:デフォルトの名無しさん mailto:sage [2020/06/28(日) 06:44:27.88 ID:8Xgo7zrJ.net]
>>676
C++17ならstd::execution::parが使えるぞ

711 名前:デフォルトの名無しさん mailto:sage [2020/06/30(火) 18:13:09.56 ID:W+MWiusu.net]
C++17を指定する#pragmaない? gccかclで



712 名前:デフォルトの名無しさん mailto:sage [2020/06/30(火) 20:39:19.04 ID:8IN9xg77.net]
>>704
引数じゃいかんのか?

713 名前:デフォルトの名無しさん mailto:sage [2020/06/30(火) 21:05:33 ID:W+MWiusu.net]
本当はC++17をデフォにする設定とかあればいいんだけど
探しても見つからんかった

714 名前:デフォルトの名無しさん mailto:sage [2020/06/30(火) 21:06:36 ID:W+MWiusu.net]
「現行規格」をデフォにできねえのおかしいだろ
作業が必要でも構わんが方法がないのは

715 名前:デフォルトの名無しさん mailto:sage [2020/06/30(火) 21:12:22.03 ID:Y/VrOCax.net]
エイリアスしたらだめなの?
全然見当違いなこと言ってる?

716 名前:デフォルトの名無しさん mailto:sage [2020/06/30(火) 21:12:29.49 ID:e6PapWOV.net]
おかしいのはお前

717 名前:デフォルトの名無しさん mailto:sage [2020/06/30(火) 21:15:58.24 ID:8IN9xg77.net]
Makefileか*shrcにでも書いておけばいいだろ…

718 名前:デフォルトの名無しさん mailto:sage [2020/06/30(火) 21:15:59.68 ID:64JVWZe8.net]
あるだろ
-std=c++17

719 名前:デフォルトの名無しさん mailto:sage [2020/06/30(火) 21:34:29.72 ID:Awxu+7Gs.net]
普通の人
オプションないのはおかしいだろ
→あるはずだから探そう

720 名前:はちみつ餃子 mailto:sage [2020/06/30(火) 22:05:18.46 ID:ZpGOlbch.net]
GCC なら specs に書いておくという方法もあるよ。

721 名前:デフォルトの名無しさん mailto:sage [2020/07/01(水) 01:50:44.15 ID:Rk3KIbda.net]
GCC 11からデフォルトで17になるよ
やったね



722 名前:デフォルトの名無しさん mailto:sage [2020/07/01(水) 10:19:56.89 ID:rbRREsW ]
[ここ壊れてます]

723 名前:h.net mailto: C++で作られているモダンなマテリアル風デザインのWindows用デスクトップアプリのソースを見ると
Direct2dやGDIを駆使して自前で描画していたのですが、ここまでしないといけないものなんでしょうか…?
[]
[ここ壊れてます]

724 名前:デフォルトの名無しさん mailto:sage [2020/07/01(水) 10:45:42.03 ID:BkFpWX8v.net]
ソレがイヤなら金だして買え
C++BuilderやらMFCやら色々あるぞ

725 名前:デフォルトの名無しさん [2020/07/01(水) 12:12:18.25 ID:IfUrt5hg.net]
コンパイルオプションであるのは当たり前だけど
それだとソースとmakefileみたいに別管理になる
ソースにコメントでC++17以上とか描くくらいなら
最初からpragmaでC++17以上指定とかしたいって
自然な要求だと思うけど

726 名前:デフォルトの名無しさん mailto:sage [2020/07/01(水) 12:22:38 ID:BzwPXT9B.net]
C++17の機能を使わなきゃ良い

727 名前:デフォルトの名無しさん [2020/07/01(水) 12:30:52.21 ID:IfUrt5hg.net]
0x以前でも動くのが理想

728 名前:デフォルトの名無しさん mailto:sage [2020/07/01(水) 12:33:19.40 ID:bZXPscHV.net]
>>715
別にそこまでしなくても良いけど自前描画は割とメリットも多い
Win32のコントロールって一つ一つは割と大きなオブジェクトだからね
それを省いて絵だけで完結させると驚くほど軽くなったりする
WinFormsに対するWPFの発想がこれ
ただしWPFは抽象化に抽象化を重ねた結果、返って重くなってしまったという産廃だが

729 名前:デフォルトの名無しさん mailto:sage [2020/07/01(水) 12:49:57.46 ID:gL8G43CT.net]
>>717
元の質問者は引数じゃいけない、エイリアスじゃいけないとは一言も説明してないのに、回答を無視してできないのはおかしいとか言ってるから、はあ?できるだろって叩かれてるんだと思うが。

あと、プリプロセッサで指定バージョン以下のコンパイラを使ったときにエラーにすることは今でもできる。

730 名前:デフォルトの名無しさん mailto:sage [2020/07/01(水) 13:20:57.29 ID:lJkrSuwc.net]
>>717
指定して何をしたいんだ?
17に対応しないコンパイラを使ったら排除したいのか?
そんなもんマクロ使えよ

731 名前:デフォルトの名無しさん mailto:sage [2020/07/01(水) 13:24:24.14 ID:lJkrSuwc.net]
そもそもpragmaは無視しても問題ないんだぞ
こんなもんで17指定してなんの意味があるんだか



732 名前:デフォルトの名無しさん mailto:sage [2020/07/01(水) 20:22:39.52 ID:OO2qW6bI.net]
static_assert(__cplusplus >= 201703, "C++17 or later only");
これだと、せっかくC++17できるコンパイラなのにエラーという愚かなことになるだろ
#pragmaとは言ったけど、has_includeみたいな標準に何か追加でもいいんだけど

733 名前:デフォルトの名無しさん mailto:sage [2020/07/01(水) 20:35:37 ID:8lUxucUi.net]
C++17の機能を使わないのが一番

734 名前:デフォルトの名無しさん mailto:sage [2020/07/01(水) 20:37:50 ID:KhLQxxHt.net]
またABIか変わるかもしれないのにソースファイルごとに勝手にコンパイラが変わったら困るんじゃないの?

735 名前:デフォルトの名無しさん mailto:sage [2020/07/01(水) 21:14:42.95 ID:b6g5MaOw.net]
コンパイラオプションつけるのになんの問題が

736 名前:デフォルトの名無しさん mailto:sage [2020/07/02(木) 04:30:05.73 ID:qK+Va6mV.net]
ダメだ通じてない

737 名前:デフォルトの名無しさん mailto:sage [2020/07/02(木) 08:58:39.89 ID:Xcy/mciM.net]
そりゃ意味ないからな
configureに準拠規格オプション探すマクロ1つ入れとけば済む話だし

738 名前:デフォルトの名無しさん mailto:sage [2020/07/02(木) 10:53:47.11 ID:qK+Va6mV.net]
// this program is C++17
と書いて手作業に期待するのを
#pragma C++17
で自動化するのは意味がないと言うのか?

自動認識はそう珍しい話ではないと思うが

739 名前:デフォルトの名無しさん mailto:sage [2020/07/02(Thu) 11:27:53 ID:JVdKJwPF.net]
今でもconfigure.acに
AX_CXX_COMPILE_STDCXX_17
って書くだけで済むから

740 名前:デフォルトの名無しさん mailto:sage [2020/07/02(木) 11:40:05.93 ID:JVdKJwPF.net]
他人に巻くプログラムならビルドパッケージでどうとでもなるし
自家用ならmakefileにオプションまでベタ書きでいいし
何にこだわってるのか知らん

741 名前:デフォルトの名無しさん mailto:sage [2020/07/02(木) 12:20:13.78 ID:qK+Va6mV.net]
プログラム1つのためにGCCをわざわざビルドしろだと?




742 名前:ィちょくってんのか []
[ここ壊れてます]

743 名前:デフォルトの名無しさん mailto:sage [2020/07/02(木) 12:21:08.29 ID:5hT1fktY.net]
C++17の機能を使わなきゃ良いだけ

744 名前:デフォルトの名無しさん mailto:sage [2020/07/02(木) 12:23:23.48 ID:jaxwQaY9.net]
素人はあれこれツール使いこなすのいやなんだよね
わかる

745 名前:デフォルトの名無しさん mailto:sage [2020/07/02(木) 12:27:34.40 ID:Kyu9Eer8.net]
>>733
え?
自分で作ってるプログラムのconfigure作るときのはなししてんだけどwwww

746 名前:デフォルトの名無しさん mailto:sage [2020/07/02(木) 12:29:59.81 ID:Kyu9Eer8.net]
今ある機能でどうとでもなることを
将来搭載されても後方互換性がなくて結局今ある機能に頼る羽目になる新機能をつけろつけろと騒がれても困りますよw

747 名前:デフォルトの名無しさん mailto:sage [2020/07/02(木) 12:30:50.81 ID:qK+Va6mV.net]
729へのリプライでそういうこと書くか?

748 名前:デフォルトの名無しさん mailto:sage [2020/07/02(Thu) 12:32:13 ID:qK+Va6mV.net]
>>737
すまん、俺はイウォーク語はわからん
日本語でしゃべってくれ

749 名前:デフォルトの名無しさん mailto:sage [2020/07/02(木) 12:39:44.74 ID:Kyu9Eer8.net]
configur.acといわれてgccをビルドするとか思っちゃう人はヒューマンステージが低いのでもっと修行してくださいwwww

750 名前:デフォルトの名無しさん mailto:sage [2020/07/02(木) 12:40:24.89 ID:qK+Va6mV.net]
typoするほどプルプルしてんの?

751 名前:デフォルトの名無しさん mailto:sage [2020/07/02(Thu) 13:32:58 ID:Kyu9Eer8.net]
>>741
ミスしか突っ込めない時点で負けだよw



752 名前:デフォルトの名無しさん [2020/07/02(木) 15:38:52.42 ID:Vurtjy2V.net]
ウェブ系の人にはなじみが無いかもしれないけど、C/C++のライブラリってバイナリだよ。

753 名前:デフォルトの名無しさん mailto:sage [2020/07/02(木) 16:22:54.35 ID:fs1yx03v.net]
��

754 名前:デフォルトの名無しさん mailto:sage [2020/07/02(木) 18:12:48.64 ID:O1gKlzQs.net]
Makefileに書けばいいじゃん

755 名前:デフォルトの名無しさん mailto:sage [2020/07/02(木) 18:31:29.81 ID:pD7vCP0t.net]
俺の環境のgccのバージョン10だぜ

756 名前:デフォルトの名無しさん mailto:sage [2020/07/02(木) 20:04:26.96 ID:tTltJbRW.net]
>>730
Makefile なりなんなりで別管理になることを問題だと思ってるのはあなただけ。
具体的に何がどれだけの問題なのか、よく考えて示してくれないとたぶん伝わらない。

単に面倒だということなら、多くの人は新たな #pragma の仕様を定めて実装するほうが面倒だとわかるので、
それがあって当然だなどという主張にはならない。

757 名前:デフォルトの名無しさん mailto:sage [2020/07/02(木) 20:17:30.19 ID:EhH78vwe.net]
コンパイラは対応する仕様決まらないままファイルの読み込み、パースをしなきゃいけないわけ?

必ず先頭行に書くとかなら未だしも
途中で現れたらどうするの?
引数で指定されているのと矛盾したらどうするの?
複数異なる指定があったら?

758 名前:デフォルトの名無しさん [2020/07/02(木) 20:19:59.76 ID:Vurtjy2V.net]
>>747
Perlのソースコードをjavacでコンパイルする事はない。
ということは、言語をソースコードの属性としたほうが良いのでは?
という考え方は理解できるかな。
一概に否定しない。

とはいえ、C++ではどっちにしろビルドシステムが必要なので、ソース内で指定できることに意義を感じない。

759 名前:デフォルトの名無しさん mailto:sage [2020/07/02(木) 20:22:38.02 ID:EhH78vwe.net]
メンバ関数定義の際にクラス内の型名を使った戻り値型を先に書く場合、クラス名::戻り値型 って書かなきゃいけないくらいパーサに配慮した仕様になっているのに、そんな面倒くさい要望に対応されるとは考えにくい

760 名前:デフォルトの名無しさん mailto:sage [2020/07/02(木) 20:23:33.54 ID:R/kQb57d.net]
自分で作ったならバージョンわかってるやろ
ライブラリとして配布するならpkg-configでも書いとけばいい
何が問題だよ

761 名前:デフォルトの名無しさん mailto:sage [2020/07/02(木) 20:24:28.66 ID:EhH78vwe.net]
拡張子で分けるのが一番自然だよね
xxx.cc17とかxxx.17.ccとか



762 名前:デフォルトの名無しさん mailto:sage [2020/07/02(木) 20:24:41.75 ID:R/kQb57d.net]
標準のバージョンなんかよりたくさん環境依存あって
それを自動解決する方法はいろいろあるのだから
それを使えばなんの問題もないんだよ

763 名前:デフォルトの名無しさん mailto:sage [2020/07/02(木) 20:25:20.06 ID:1S4E8SKc.net]
ライブラリとして配布するのに
C++17を要求するって

使ってもらう

764 名前:気無いだろ []
[ここ壊れてます]

765 名前:デフォルトの名無しさん [2020/07/02(木) 20:27:04.96 ID:Vurtjy2V.net]
ライブラリを使ってくださるお客様にC++17を用意させるのは心苦しいかもしれないな。

766 名前:デフォルトの名無しさん mailto:sage [2020/07/02(木) 20:27:07.52 ID:EhH78vwe.net]
今時c++17必須でも大丈夫だろ
msvcですら使い物になる程度まで対応しているんだぞ

767 名前:デフォルトの名無しさん mailto:sage [2020/07/02(木) 20:28:23.76 ID:1S4E8SKc.net]
>>756
組み込みは未経験か?

768 名前:デフォルトの名無しさん [2020/07/02(木) 20:28:44.61 ID:Vurtjy2V.net]
むしろ20はよ来いと思ってますが。

769 名前:デフォルトの名無しさん mailto:sage [2020/07/02(木) 20:34:28.40 ID:EhH78vwe.net]
組み込みのほうがwindowsより規格対応早いくらいじゃね
まあ全部は使えないけど、それは03だろうが同じだ
むしろコンパイル時に出来ることが増えた分組み込みには新しい規格のほうが向いている

770 名前:デフォルトの名無しさん mailto:sage [2020/07/02(木) 20:36:35.79 ID:1S4E8SKc.net]
小規模組み込みは未経験か?

771 名前:デフォルトの名無しさん mailto:sage [2020/07/02(木) 20:43:28.28 ID:EhH78vwe.net]
小規模だとコンパイラ使えるだけでも御の字
コア部分は結局アセンブリで書くし
そもそも自由にスタックすら使えなくね?



772 名前:デフォルトの名無しさん [2020/07/02(木) 20:47:32.39 ID:Vurtjy2V.net]
RAM16バイトしかないしね。
無理ですわ。

773 名前:デフォルトの名無しさん mailto:sage [2020/07/02(木) 21:00:59.82 ID:qK+Va6mV.net]
>>747
あなただけって他の人が支持しているレスも出てるよ?
自演だろって言うんだろうけど違う
マウントしたいんだろうね

774 名前:デフォルトの名無しさん mailto:sage [2020/07/02(木) 21:02:30.64 ID:qK+Va6mV.net]
>>757
その言葉をそのまま返す
ARM以外の何かをやってる人?

775 名前:デフォルトの名無しさん mailto:sage [2020/07/02(木) 21:03:18.41 ID:EhH78vwe.net]
拡張子で区別しろよ
FORTRANを見習って

776 名前:デフォルトの名無しさん mailto:sage [2020/07/02(木) 21:03:28.33 ID:qK+Va6mV.net]
>>742
737の突っ込みは見なかったことにしたいんだよね

777 名前:デフォルトの名無しさん [2020/07/02(木) 21:04:54.87 ID:Vurtjy2V.net]
>>763
どのレス?

778 名前:デフォルトの名無しさん mailto:sage [2020/07/02(木) 21:06:16.16 ID:jaxwQaY9.net]
もうGCCビルドした?

779 名前:デフォルトの名無しさん mailto:sage [2020/07/02(木) 21:06:39.99 ID:qK+Va6mV.net]
>>767
716

780 名前:デフォルトの名無しさん mailto:sage [2020/07/02(木) 21:07:29.63 ID:qK+Va6mV.net]
>>758
禿同

781 名前:デフォルトの名無しさん mailto:sage [2020/07/02(木) 21:14:02.46 ID:EhH78vwe.net]
念願のconceptが



782 名前:デフォルトの名無しさん mailto:sage [2020/07/02(木) 21:19:01.95 ID:Pm5AW70q.net]
目的がわからなすぎて、始め何をしたいのかさっぱりわからんかった。
答えがでるたびにゴールを動かされてる気分だったわ。
コミュ障のID:qK+Va6mVが全て悪い

783 名前:デフォルトの名無しさん mailto:sage [2020/07/02(木) 21:24:05.51 ID:qK+Va6mV.net]
ゴールを真面目に追ってくれてありがとう

784 名前:デフォルトの名無しさん mailto:sage [2020/07/02(木) 21:29:34.62 ID://fjMSvC.net]
>>773
死ね

785 名前:デフォルトの名無しさん [2020/07/02(木) 21:45:55.51 ID:Vurtjy2V.net]
まあ一通り意見が出そろったと思いますが、ISO/IEC 14882:2023への提案は、今回は見送らせていただきたいと存じます。
また何かありましたら、スレのほうまでご連絡ください。

786 名前:デフォルトの名無しさん mailto:sage [2020/07/02(木) 22:48:32.20 ID:R/kQb57d.net]
K&Rしか解さないコンパイラのためにプロトタイプ宣言したコードの先頭にCのバージョン書くか
アホらし

787 名前:デフォルトの名無しさん mailto:sage [2020/07/02(Thu) 22:59:45 ID:il/EZBAV.net]
extern シー

788 名前:デフォルトの名無しさん mailto:sage [2020/07/02(木) 23:21:51.63 ID:1S4E8SKc.net]
>>764
色々とやってる

789 名前:デフォルトの名無しさん mailto:sage [2020/07/02(Thu) 23:30:42 ID:NPHwzOsK.net]
色々とやらかしてる

790 名前:デフォルトの名無しさん mailto:sage [2020/07/02(Thu) 23:32:21 ID:IPGZ+Gs9.net]
範囲for文でコンテナを走査するときに要素を参照で持つかどうかふと迷った
それがパフォーマンスに影響するなら当然実測するべきだが、大概こんなもんが律速になるわけないからどっちかに決めときたい
要素を変更するなら参照、そうじゃないなら参照じゃない、でおk?

ちなみに型は指定するよりautoにした方が大抵の場合速いみたいな話あるよね?

791 名前:デフォルトの名無しさん mailto:sage [2020/07/02(Thu) 23:32:49 ID:NPHwzOsK.net]
質問なのですが自作アプリをソースコードでGCCをビルドして配布する場合、
テストってどうするの?
あらゆるGCCのビルド条件でテストするの??



792 名前:はちみつ餃子 ◆8X2XSCHEME mailto:sage [2020/07/02(Thu) 23:36:11 ID:53deMRLD.net]
>>780
auto&& にしておけばだいたい良いよ。

793 名前:デフォルトの名無しさん mailto:sage [2020/07/02(Thu) 23:38:42 ID:1S4E8SKc.net]
>>780
レジスタ1個で収まる型ならコピー
そうじゃないなら参照
書き換えないならconst参照

794 名前:デフォルトの名無しさん mailto:sage [2020/07/02(Thu) 23:45:17 ID:jaxwQaY9.net]
>>781
あらゆるなんか無理に決まってるだろ
人のまねしろ
他人のgithubとか見たことないのか?

795 名前:デフォルトの名無しさん [2020/07/03(金) 02:56:17.35 ID:36TwtcUk.net]
>>781
僕はclang-cl、cl、gccで各Release/Debug、計6種のバイナリを作ってテスト通してますよ。
実際、通らないことが稀にあるので、そうゆう手順になりました。

とはいえ、ミスをしない人なら、必要ない事かも。
テストも必要ないかもしれない。

796 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 06:34:45.62 ID:pwGjxhFH.net]
>>785
デスヨネー;

ていうかソースコードで配布したものをユーザーがautomakeでGCCをビルドする文化とか
ソフトウェアー工学的に正しくテストされてるうちに入れることが本当に可能なの??
とそこはかとなく疑問が、

797 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 06:42:13.15 ID:pwGjxhFH.net]
もはやautomakeでGCCをビルドするレベルになると、
事はソースコードを書いた人の品質にとどまらず、
ユーザーがどのような経緯でインストールしたかわからない
野良ライブラリとか野良コンパイラの品質が絡んできてしまうま、

798 名前:703 mailto:sage [2020/07/03(金) 07:07:39.48 ID:AnL7VPS4.net]
まあしかし結局#pragmaはないってことね
最初の質問には答えて貰えたようだ
みんなありがとう

799 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 07:59:45.22 ID:9AQoDd9l.net]
CMakeとかmeson使えよ

800 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 08:30:15.36 ID:AnL7VPS4.net]
いやそれは勝手にするさ
俺の状況をいちいち知らんやつに
わかってもらう必要もないし

801 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 09:00:50.39 ID:mxts/vg4.net]
無知が謎の上から目線



802 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 09:02:31.13 ID:mxts/vg4.net]
gccをビルドとかなんの話だよwwww

803 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 09:06:03.21 ID:mxts/vg4.net]
そもそもコンパイラは後方互換性を気にしていれば良くて
過去のコードがコンパイルできる、古い記法なら古いよとメッセージを出して終わるまでやれば良くて
将来変わるであろう規格に備えて私の知らない規格ですよと教えてあげる必要はなくエラーで落ちればそれでいい

804 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 09:24:17.78 ID:AnL7VPS4.net]
恰好つけたいんなら余計なことは言わないほうがいいぜ(クスクス

805 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 09:45:48.23 ID:0L14wyJb.net]
>>794
それは
>>790
なんて書いちゃうやつのことでしょw

806 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 09:59:43 ID:AnL7VPS4.net]
あれは何かおかしいのか? おまえの頭のほうが(ry

807 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 10:28:37.24 ID:0L14wyJb.net]
>>796
無知を指摘されただけのことを自分の事情的に言い訳して謎の上から目線へ変換してるのが頭悪すぎでしょw

808 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 10:45:09.88 ID:AnL7VPS4.net]
いらんものを使わんのを無知とか大きなお世話なんだよ
おまえだっていらんものは使わんだろうが、それも頭が悪いからか?

いちいちひっ絡んでくるのは何かよっぽど悔しい思いしてるんだろうな
俺は最近あんまり誰かをコテンパンにやっつけた憶えはないんだが
何か気に障ったのか?

809 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 10:47:55.45 ID:AnL7VPS4.net]
ずーっと前にシバイたったやつがまだ根に持ってるのかな
だとしたらキモすぎ

810 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 10:59:50.18 ID:0L14wyJb.net]
他人に教えを乞うておきながら
やあご苦労的な上から目線でまとめるバカwww
匿名掲示板で根に持つも何も、一体お前誰だよwwwww
バカってホントwwww

811 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 11:01:41.75 ID:0L14wyJb.net]
正体わからない場所で根に持たれてると思うってことは
同じようなことを繰り返してるんだろ?
無知を晒して指摘されてるのになんか偉そうとかwwww
あるいはココロの病気かwww



812 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 11:03:13.38 ID:AnL7VPS4.net]
787のどこが上から目線なんだよ
言いがかりはやめてもらおうか

813 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 11:13:37.77 ID:0L14wyJb.net]
>>802
わからないなら人間関係ヤバイでしょw

814 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 11:14:42.94 ID:0L14wyJb.net]
散々罵倒しといてこれくらいで許したるわとかいうメダカ師匠になってるんだよwww

815 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 11:19:30.11 ID:AnL7VPS4.net]
>>803
説明しろよ
できないならおまえもヤバイぜ

816 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 11:26:31.12 ID:AnL7VPS4.net]
煽ってるつもりのようだが脇甘すぎだろw

817 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 12:17:55.40 ID:0L14wyJb.net]
>>806
煽って他人に教えを乞うスタイルはお前だろwwww

818 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 12:19:01.99 ID:AnL7VPS4.net]
いーや、思い当たる節が全然ない

>>803
説明しろよ
できないならおまえもヤバイぜ

早くしろよw

819 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 12:19:30.89 ID:0L14wyJb.net]
匿名掲示板で根に持たれてる自覚があるとか相当ココロの状態やばいよw

820 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 12:20:19.89 ID:AnL7VPS4.net]
キモすぎつってんじゃん

>>803
説明しろよ
できないならおまえもヤバイぜ

早くしろよw

821 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 12:20:41.85 ID:0L14wyJb.net]
>>808
一連の流れであの態度
頭おかしいでしょw
それがわからないなら人間関係やばいw



822 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 12:24:37.22 ID:jbweNl0h.net]
はい次

823 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 12:36:38.06 ID:AnL7VPS4.net]
>>811
やーい説明できねえ
ブーメラン痛そうだなw

次におまえは「ブーメランなんか刺さってないから痛くない」という
目にうるうる涙をためながら

824 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 12:38:58.29 ID:oEOxZVHb.net]
pragmaのアイデアを思いつくこと自体はまぁいいと思うけど
>>748 の指摘受けたら、この仕様は駄目なことわかるよね
なのにそこでやめずに強弁続けておいて最後に >>788 はずっこける

825 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 12:41:35.64 ID:AnL7VPS4.net]
なんか他の#pragma使ってなさそうだね
ルールを途中で変更する#pragmaは珍しくないんだが

826 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 12:48:45.85 ID:oEOxZVHb.net]
まだ何がダメなのかわかってないらしい
しかし途中でコンパイラ切り変えるのは画期的だわw

827 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 12:57:41.14 ID:AnL7VPS4.net]
コンパイラ切り変え??? 何の話をしている?

828 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 13:00:50.61 ID:oEOxZVHb.net]
もういいよ飽きた

829 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 13:01:08.06 ID:AnL7VPS4.net]
ID変わったけど話し方が酷似している
さては、またあいつか

830 名前:デフォルトの名無しさん [2020/07/03(金) 13:05:25.55 ID:6268sYfp.net]
go は
// コメントに描いてあっても反応するから怖い

831 名前:デフォルトの名無しさん [2020/07/03(金) 13:07:15.94 ID:6268sYfp.net]
BOM付選んだコンパイラもあるし
コンパイルオプション選んだコンパイラもあるけど
ソースの先頭のエンコード選んだコンパイラはないんだっけ



832 名前:デフォルトの名無しさん [2020/07/03(金) 13:09:03.86 ID:6268sYfp.net]
>>752
なるほど
.o32とか.o64とか
.c32とか.c64とかな

833 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 13:15:32.85 ID:AnL7VPS4.net]
ISO/IEC14882は3年毎に改訂されることになっているんだから
今後は定期的な改定に備える計画もあって然るべきだと思う

834 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 13:22:06.06 ID:ShNCsHag.net]
何がいったいわかったのだろう
それに勝手に他の人を認定してるしwww
相当ヤバいわw

835 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 13:26:13 ID:AnL7VPS4.net]
推測と認定の区別がつかないやつ
実社会でも不自由してそうだな

836 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 13:30:10 ID:AnL7VPS4.net]
あわよくばまぐれ当たりを狙ったようなテキトーな言葉遣いをするやつ
迫力ねえんだよ

837 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 13:32:31 ID:ShNCsHag.net]
では何がわかったんだ?
ああ?
喧嘩に負けて上から目線の捨て台詞にしか見えねーんだよw

838 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 13:35:59 ID:AnL7VPS4.net]
ほらな

心当たりのあることを咎めてこないから全くダメージにならない
何かイヤミを言ってやろうという意図だけはわかるんだが滑りすぎ

839 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 13:53:09.64 ID:BB9T+E2r.net]
ここでいつも似たような喧嘩をしている二人って毎回同じ奴らだろう。
なんだかんだ言ってお前ら仲良いな。
他のスレ住人に見せつけてくれなくていいから、よそでやれ。

840 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 14:02:21 ID:/+uSoVK/.net]
独りで客寄せのサクラだったりして

841 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 14:03:03 ID:ZGwZb8L6.net]
ここまで酷いと自作自演にしか観えない



842 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 14:06:09 ID:AnL7VPS4.net]
そういえば俺にひっ絡んでくるやつ
話し方というかアホさが似てると思うことはちょくちょくある

843 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 14:15:34.52 ID:ShNCsHag.net]
>>828
787がメダカ師匠になってることがわからないようじゃどうしようもないよw

844 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 14:49:50.97 ID:Rli2dJzV.net]
まぐれ当たり来ないな

845 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 15:56:25.56 ID:f9zPtScu.net]
>>748
先頭行に書けばいいだけだろ
まあ使い勝手を考えてコメントを除く先頭行に書くようにすればいい

> 途中で現れたらどうするの?
エラーにすればいい

> 引数で指定されているのと矛盾したらどうするの?
どちらを優先するかを決めておけばいい

> 複数異なる指定があったら?
エラーにすればいい

よくある処理だしなんの問題もないけど?

846 名前:デフォルトの名無しさん [2020/07/03(金) 15:58:53.44 ID:36TwtcUk.net]
C++使いにしては低能過ぎるレスが多いな。
どういうことだ。

847 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 16:01:05.70 ID:3KYyPS1e.net]
>>783
プリミティブ型ならレジスタに乗るって思って良いんですかね?

848 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 16:11:49.06 ID:fxIx3skX.net]
>>837
構造体型/配列型以外のデータは原則的にレジスタには乗る。
ただし、参照と直値のどちらが効率が良いかは、レジスタに乗るかどうかだけで
決まるわけではない。
1個のレジスタに乗らなくてもレジスタ数個分ならコピーしてしまった方が
参照より速くなる場合は多い。ケースバイケースだが、レジスタ5個分とかでも
コピーした方が速い場合もある。

849 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 16:59:35 ID:9AQoDd9l.net]
そもそもボトルネックになるのかっていう

850 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 17:22:38.22 ID:f9zPtScu.net]
>>837
ケースバイケース
普通はそんなことを気にする必要はないし気にする必要があるなら処理系のドキュメントを読め
>>838みたいに憶測で語ってる奴は無視しておけばいい

851 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 17:37:19.38 ID:fxIx3skX.net]
>>840
憶測じゃなく、俺は高速化の専門家だ。



852 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 17:43:16.98 ID:3KYyPS1e.net]
>>839-840
いや元の質問(>>780)を読めよボンクラ

853 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 17:47:39.31 ID:fxIx3skX.net]
>>842
読んだから、高速化のためには、レジスタに乗るかどうかだけで決めるべきじゃないので正確にアドバイスしたが、あなたが理解できないだけだよ。

854 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 17:51:37.27 ID:fxIx3skX.net]
>>843
参照を使った場合、参照を介してのメンバアクセスにはコストがかかるので、
むしろ最初にコピーした方が高速になることがあるんだ。
文字列データや、巨大なバッファを持つようなものはコピーしてはいけない。
それは速度だけじゃなく、無駄なメモリー領域の確保まで必要となるため。
もしメモリー効率度外視して、バッファ確保の時間も0だと仮定してよいなら、
大きなデータであっても、参照を介してアクセスするよりもコピーした方が速いことが有る。
ただし、その場合にはキャッシュを超えない程度の場合は、という条件が付くことになる。

855 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 17:58:05.10 ID:yyYbA8Zx.net]
引数受け渡しがクリティカルになるような状況ならinline化するかipo最適化するだろ

値だろうがconst参照だろうが、最適化されれば違いはなくなる

856 名前:デフォルトの名無しさん [2020/07/03(金) 18:00:47.69 ID:36TwtcUk.net]
おまえらは王者の風格が足りない。
偽C++使いめ。

857 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 18:10:53.48 ID:fxIx3skX.net]
>>845
>値だろうがconst参照だろうが、最適化されれば違いはなくなる
ダウト

858 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 18:16:59.50 ID:3KYyPS1e.net]
>>843
いや安価先をよく見てくださいよ
あなたは僕のリクエスト通りに「大概」の回答をくれたから感謝してます

859 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 18:20:12.77 ID:v8523RMt.net]
違いはなくならないこともあるが
普通は無視していい

パフォーマンスが非常に重要なループなら
想像で語らないで実測が基本だし
コンテナのメンバ関数経由でアクセスすることも疑問に思わないと

860 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 18:28:20.50 ID:v8523RMt.net]
コピーは非常に時間がかかることもある
構造体やクラスのちょっとした変更で後から増えることもある
参照は極端に速度低下することはない

確実にコピーの方が速い時だけコピーにしておいて
不明な時、判断が面倒な時は参照にしておけばいい

私の中の基本ルールが>>783
最適化が必要なら
参照かコピーかだけにとどまらないもっと大がかりな事まで考える
2択だけなんて事はしない

861 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 18:29:04.81 ID:v8523RMt.net]
関数パラメータも同じ



862 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 18:30:44.76 ID:33Ox5yaL.net]
アホみたいなチューニングが必要なら、そもそも範囲forを使うのやめたら?
直感と異なるかもしれんが、未だ普通のforのほうが早い。

863 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 18:38:28.00 ID:v8523RMt.net]
アホみたいなチューニングってのが意味不明だが
必要ならやらなきゃならん

コンテナ経由ってのがそもそも遅くなる要因
直接ポインタで扱う方が当然速度は期待できる

>>783みたいな基本ルールって
それぞれ自分の中にあると思う
それを外れる最適化がヒツヨウニなるのは極めて稀
稀であったとしても必要な時はある

864 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 18:39:47.81 ID:yyYbA8Zx.net]
inline化してたらコピーが速いなんて事象は起こり得ないだろ

865 名前:デフォルトの名無しさん [2020/07/03(金) 18:55:06.29 ID:36TwtcUk.net]
社内報にアウトライン化による高速化事例が載ってましたが。

866 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 18:58:23.70 ID:BB9T+E2r.net]
>>846
うわー、すごい王さまだー。
でもなんで、はだかなの?

867 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 19:23:59 ID:O03V1sqG.net]
>>841
自称高速化の専門家とやらの妄想は要らんよw

868 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 19:26:52 ID:O03V1sqG.net]
>>842
自分一人でコード書いてるならテキトーに決めとけ
チームでやってるならコーディング規約に従え

869 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 19:31:01.09 ID:C0RVqI6W.net]
高速化の専門家www

じゃあおれも

870 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 19:40:17.44 ID:3fEHgumK.net]
他称なら兎も角、自称の専門家って他のことは分かりませんって意味でしかないよね

871 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 19:43:24 ID:v8523RMt.net]
高速化の基本はアルゴリズム、データ構造
その辺の専門家が参照かコピーかみたいな小さな事を気にするのかな?
どんなコンテナとか無視して



872 名前:デフォルトの名無しさん [2020/07/03(金) 20:07:32.86 ID:36TwtcUk.net]
他に「夏本番、キラキラ☆コーデ」というのも載ってたけど、関係なさそうだったんで読んでません。

873 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 20:12:17.82 ID:v8523RMt.net]
>>855
分岐予測
キャッシュ
関数ポインタ

私がすぐに思い付くのはこのくらい

874 名前:デフォルトの名無しさん [2020/07/03(金) 20:13:28 ID:36TwtcUk.net]
コーディネートではなくコーディングの略ということはもちろんわかっています。

とはいえ、意識の階層が違いすぎて、「あ、これ関係ねーやつだな」って。

875 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 20:14:05 ID:v8523RMt.net]
インラインの反対はアウトラインなのか

876 名前:蟻人間 mailto:sage [2020/07/03(金) 20:47:01.49 ID:ZXpf7qOR.net]
アウトアブライン
out-of-line

877 名前:デフォルトの名無しさん [2020/07/03(金) 20:47:30.73 ID:36TwtcUk.net]
あ、そういえば。
インライン、アウトラインで思い出したんだけど。

むかしツタヤでDVD探してて、カシラモジ・・・カシラモジ・・・ってカ行探してたんだけど無い。
つぎイ行探しても、あれ??無いわ??ってなった。
で、ふとア行見たら・・・アタマモジかよ・・・ありました。

878 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 20:48:50.40 ID:oEOxZVHb.net]
陽ライン

879 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 21:33:38.36 ID:AnL7VPS4.net]
高速化の専門家って当然ハードわかるよな
わかる、つーか皇帝レベル

880 名前:デフォルトの名無しさん [2020/07/03(金) 21:58:20.31 ID:36TwtcUk.net]
>>866
オブライアンはアイルランド系の苗字ですね。

881 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 22:43:36.42 ID:95N/W1ib.net]
イ行



882 名前:デフォルトの名無しさん [2020/07/03(金) 22:53:21 ID:36TwtcUk.net]
>>871
いろはにほへとです。
無理やりすぎますかね。

883 名前:デフォルトの名無しさん [2020/07/03(金) 23:55:09.00 ID:2ewiuNjd.net]
>>863
GPU
FPGA

884 名前:デフォルトの名無しさん [2020/07/04(土) 00:46:19 ID:KIBH4SNT.net]
「慶應卒の学歴なんていらない」10代起業で成功する子の共通点
https://www.excite.co.jp/news/article/President_35457/
起業で成功するキャリア形成の仕方とは? 元プロサッカー選手で起業家の鈴木啓祐氏に聞いた
https://sogyotecho.jp/career-development/
【アプリ開発で起業】必要な心得とマネタイズ方法のすべて
https://www.dreamgate.gr.jp/contents/column/application-development
学生起業家が開発、「人を軸に本を探すアプリ」とは?読書通じて「考える力」養って
https://newswitch.jp/p/20168
島田商高生がアプリ考案、発表 ICT起業家育成プログラム
https://www.at-s.com/news/article/local/central/730010.html
医師コンビが「治療用アプリ」で起業、禁煙に続き高血圧治療アプリを開発
https://diamond.jp/articles/-/229375
好きが高じて“カレー起業”、キャッシュレス決済アプリ「TOKYO MIX CURRY」の挑戦
https://diamond.jp/articles/-/215868

885 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 09:49:13 ID:sAcpDZbT.net]
>>829
俺もちょいちょい喧嘩してるけど今回関係ないぞ

886 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 19:16:06.20 ID:rNblEJCx.net]
浅はかな推測が外れまくったという
珍しくも何ともない現象だな

887 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 07:47:21 ID:3TMy8TU+.net]
std::vectorのstd::shared_ptrを返すメソッドGetHoge()があるのですが、
for (auto e : *GetHoge())
でループすると要素があるにも関わらずループしません
auto t = GetHoge();
for (auto e : *t)
とするとループします
これは何か違いがあるのでしょうか??
MSVCです

888 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 09:34:39.04 ID:M7eGAoZB.net]
msvcならeとかtにカーソル合わせればどういう型になってるかかわかるんじゃないの

889 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 10:04:45.65 ID:cAnzpYmx.net]
無駄にコストを上げる必要は無いと思う

890 名前:デフォルトの名無しさん [2020/07/05(日) 11:12:16.02 ID:Sc6x6nbH.net]
イテレータ型にしなきゃいけないんじゃない?

891 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 11:57:29 ID:cm1+apW3.net]
>>877 さんの質問への直接の答えじゃないけど、
typeid(e)::name() とかで auto の解釈を見れば何か分かるんじゃないかな。

特定の場合に auto はどのような型を生成するか、っていう
一般的な情報って言うか規則もどこかで見られるのかも知れんけど。



892 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 13:00:13.16 ID:S3hYTv6M.net]
>>877
範囲for文の中ではauto&&の参照で範囲オブジェクトを束縛してくれるんだけど
上の場合は束縛されるのは*GetHoge() (=中身のvector)であって、GetHoge()の戻り値そのもの(=shared_ptr)は束縛されない
なのでshared_ptrはループに入る前に破壊されてしまって、参照カウントが0になると中身も破壊されてしまう

下の場合は戻り値のshared_ptrをtで確保してるから大丈夫ってこと

893 名前:デフォルトの名無しさん [2020/07/05(日) 13:03:35.81 ID:NbYPgepr.net]
>>882
なるほど

894 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 13:16:51.38 ID:wYW3xnyi.net]
C++はますます書いてあることと動作の関係を掴み難くなりつつ
あるな!

895 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 15:02:20.05 ID:G8wpw7EE.net]
>>877
最初の書き方の場合、GetHoge() の戻り値は、一時オブジェクト。
一時オブジェクトの生存期間は、その部分式を含んだ完全式の終わりまでとされている。
GetHoge()が書いてある場所は、for ブロックの開始時に、最初に一度だけ評価されるが、
完全式としては、その時点で終わっている。
だから、関数戻り値の一時オブジェクトの生存期間は、forブロックに入る直前に終わってしまう。
戻り値の型は、shared_ptr<vector<T>>で、この中身を参照している shared_ptrが全て
消失した時点で中身まで deleteされる。
そのため、forブロックの中では、もはや、vector<T>が削除されてしまっているということらしいね。

2番目の書き方の場合は、shared_ptr が変数 t にコピーされているので、参照カウンタが1つ分残っている。
そのため、それが指している vector<T> のメモリブロックも削除されずに残っている。

というわけで、ループしているのに結果がおかしいというのは分かるが、全くループしない理由は余り分からない。

896 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 15:10:48.51 ID:0KU/lBNo.net]
>>884
バカ用じゃないってだけ

897 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 15:37:26 ID:OSntWRwy.net]
というか>>882の指摘通りの場合、GetHogeで初めてvectorを生成してるか
自身を元に新たなshared_ptrを作って返してることになるんだが
だいぶおかしな設計じゃね?

898 名前:デフォルトの名無しさん [2020/07/05(日) 16:19:00.25 ID:NbYPgepr.net]
痛レータ

899 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 16:52:53 ID:/j2YKhHE.net]
>>884
クールパルルパクルリンパ();  ←関数

900 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 17:09:54.17 ID:S3hYTv6M.net]
>>885
ちょっと間違ってる
範囲for文はここで書いてるように「同等な書き換え」がされて、範囲オブジェクトはここの例で言うauto&& __rangeに束縛される
https://en.cppreference.com/w/cpp/language/range-for
そして、__rangeに束縛されたものが一時オブジェクトであれば、参照束縛による寿命の延長でforブロックの終了まで生存する

だからこういうのは問題ないのよ
for(auto a: std::vector<int>{1,2,3})

あと最後に関しては破壊されたvectorを使っちゃってるから未定義動作で何が

901 名前:起きても文句は言えない
メチャメチャな値を取り出そうと、全くループしなかろうとその時の気まぐれよ

>>887
同意。Getという名前は不適切だな
[]
[ここ壊れてます]



902 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 17:14:11.09 ID:G8wpw7EE.net]
>>89
こんな機能があったとは:

Temporary range expression

If range_expression returns a temporary, its lifetime is extended until the end of the loop, as indicated by binding to the forwarding reference __range, but beware that the lifetime of any temporary within range_expression is not extended.

903 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 18:01:59 ID:LGYlGSYG.net]
昔はC++は複雑怪奇、C#はシンプルで分かりやすいって感じだったけれど、
今はC#の方が仕様拡張で複雑になってきて相対的に大差なくなって来てる気がする

904 名前:デフォルトの名無しさん [2020/07/05(日) 18:04:58 ID:Sc6x6nbH.net]
いろいろ考えたらC++にあるアレが必要になったんだよ
アレだよアレ
わかるだろ

905 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 18:20:14.04 ID:/j2YKhHE.net]
本来標準ライブラリーで済むものまで言語仕様に入ってやがる
それというのも標準ライブラリーがしょぼくてかつ改善が入らん
あっちはだれがやってるんだ

906 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 18:31:21.12 ID:wYW3xnyi.net]
非バカの>>886>>889は当然コード見た瞬間最初から全部わかってたんですねわかります、

907 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 19:22:37 ID:3TMy8TU+.net]
皆さんはありがとう御座います
GetHogeは実際はEnumHogeで内部でstd::shared_ptr<std::vector>を生成して返すメソッドです

一時的なオブジェクトで書き方の違いで結果が変わるなんて知りませんでした
とりあえず、変数に代入します

908 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 19:59:22 ID:G8wpw7EE.net]
>>890
>参照束縛による寿命の延長
これは、ranged for 以外でも、一般的に働く機能ですか?
C++ 11から有りましたか?
それとも最近入りましたか?

909 名前:はちみつ餃子 mailto:sage [2020/07/05(日) 20:33:35.81 ID:jWvpOogX.net]
>>897
C++03 以前から有ったよ。

910 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 21:12:13.70 ID:wYW3xnyi.net]
ていうか
>>890
>あと最後に関しては破壊されたvectorを使っちゃってるから未定義動作で何が起きても文句は言えない
>メチャメチャな値を取り出そうと、全くループしなかろうとその時の気まぐれよ
mjd?!
{
 auto t = GetHoge();
 for (auto e : *t) {
  ...   // (A)
 }
 // (B)
}
ならt(GetHoge()が返したshared_ptr<vector<T> >は(B)になるまで生存するから
(A)において*tの要素を参照する(auto &&)することは全く問題無いんじゃ…

911 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 21:15:51.36 ID:wYW3xnyi.net]
訂正orz,
誤: (B)になるまで生存する
正: 少なくとも(B)になるまでは生存する(参照カウンタが0より大の状態を保つ)



912 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 21:20:48.10 ID:0KU/lBNo.net]
>>895
イヤミになってない

913 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 21:24:12 ID:wYW3xnyi.net]
ていうか>>890の「最後に関しては」は実は
>というわけで、ループしているのに結果がおかしいというのは分かるが、全くループしない理由は余り分からない。 (>>885)
を指していたりする? だとしたらサーセン;。n_

for文のイテレータがvectorを指しているのに対して、vectorを保持するshared_ptrの破棄タイミングは確かに
forの前でも後でも有り得るヨカン、

914 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 21:30:37 ID:kFjTOHVy.net]
C++は局所的に動作を想像できない場合が多いのがなぁ。
バカじゃなけりゃマクロ使いまくったCコードも理解できるかというとそうじゃないだろうと。

915 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 21:36:58 ID:wYW3xnyi.net]
もっとも
>for (auto e : *GetHoge()) { ... }
このコードで動作が不定(未定義動作)になるのはGetHoge()が返したshared_ptrの参照カウンタがきっかり1だった場合であって、
2以上だったらきちんと回るんジャマイカ、
そう考えるとなかなか>>877のお題は味わい深い…

>>901どう?

916 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 21:37:43 ID:Bskedq4a.net]
腐った代入オペレータかかれるだけで悲惨なことになる

917 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 21:42:04 ID:wYW3xnyi.net]
(上の話に限って言えばvector<T>のTに間してどれだけ腐った代入オペレータが定義されていようとも)
別に

918 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 22:06:13.63 ID:0KU/lBNo.net]
>>904
おまえ頭悪いなって
俺が何の下支えもなく言う場合と同じだ

俺は瞬間でもないが落ち着いて追えるケースでしかない
おまえさんは絶望感でも持ったのか?

919 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 22:08:49.40 ID:0KU/lBNo.net]
しかしまあ歳は取りたくないと思ったな
全盛時の俺にはありえんことが相次いで起きている一例だった

920 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 22:35:02.11 ID:S3hYTv6M.net]
>>902
そうだよ

921 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 23:23:07.13 ID:7RTbKb77.net]
C++のラムダって、Javaとかみたいに1文だけの場合にreturn省略できないんですかね?
[](auto a, auto b){ return a + b; } → [](auto a, auto b) { a + b } みたいな感じで。



922 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 23:59:55 ID:S3hYTv6M.net]
今はムリ
検討はされてるから将来的に出来るようになるかもしれない

923 名前:デフォルトの名無しさん mailto:sage [2020/07/06(月) 00:06:22 ID:J5KuSvPS.net]
>>908
この程度のことが落ち着いて追わねば分からないというのは
藻前は衰えたのだ

924 名前:◆QZaw55cn4c mailto:sage [2020/07/06(月) 00:08:16 ID:Cb7lpAWE.net]
>>910-911
https://mevius.5ch.net/test/read.cgi/tech/1584975873/864
がいよいよ公認されるってわけですか…微妙な文法ですね

925 名前:はちみつ餃子 mailto:sage [2020/07/06(月) 05:27:19.13 ID:Js6m+wFY.net]
Rust に慣れてくると C++ で return を書くのを忘れることもある。

926 名前:デフォルトの名無しさん mailto:sage [2020/07/06(月) 07:02:55.73 ID:oajwJTo1.net]
>>911
ありがとうございます。C++23ぐらいを期待します

927 名前:デフォルトの名無しさん mailto:sage [2020/07/06(月) 07:29:08.62 ID:hCVItazY.net]
>>896
てか結果を返すだけなのにスマポに入れるとか、
呼ばれる関数が結果をどのように管理するかにまで口出しするのはどうかと思うけどね

928 名前:デフォルトの名無しさん mailto:sage [2020/07/06(月) 07:43:23.12 ID:tvsN32eC.net]
>>912
my powers are weak old man.

929 名前:デフォルトの名無しさん mailto:sage [2020/07/06(月) 21:29:07.26 ID:J5KuSvPS.net]
非バカの要件にコード見た瞬間最初から全部ワカルというのが入るということは
>>895で宣言して合ったのに対し別段オブジェクションをつけるでもなく
>俺は瞬間でもないが落ち着いて追えるケースでしかない
とだけ言ったのだから彼は自ら非バカではないと告白したのである
漏れの有り様の批判に繋げられても困る

930 名前:デフォルトの名無しさん mailto:sage [2020/07/06(月) 21:39:04.45 ID:Edtf8jlD.net]
>>896です
>>916
でも、スマポに入れないで返す場合、例えば、受け取った側で他で色々使いまわすから受け取った側でいちいちスマポ作る
ってことでしょうか??
というか、一般的なライブラリ作る場合どうすればいいんでしょうか??
std::shared_ptr<std::vector<YYY>>XXX::EnumYYY()
とりあえず、スマポでくるんで返してあげれば受け取り側でいかようにもできるからいいのかなと思ってるのですが。

931 名前:デフォルトの名無しさん mailto:sage [2020/07/06(月) 22:16:12.21 ID:Edtf8jlD.net]
std::vector<YYY>で返して
std::vector<YYY> XXX::EnumYYY ()
で、受け取った方で他でスマポにしようということで
auto yyy = x.EnumYYY();
auto ptr = std::make_shared<std::vector<YYY>>(std::move(yyy));

とかやればオーバーヘッド少なくスマポ作れるんです?



932 名前:デフォルトの名無しさん mailto:sage [2020/07/06(月) 22:36:37.36 ID:J5KuSvPS.net]
記憶管理という本来隠すべき実装の詳細(と多くの人が考える事柄)を
使う人が意識せねばならな続けるのは嫌すぐる、

933 名前:デフォルトの名無しさん mailto:sage [2020/07/06(月) 23:09:10.15 ID:J5KuSvPS.net]
getterがshared_ptr<T> pを返したとたん、pの寿命と*(p.get())の寿命の二重管理の責務が利用者に行く
>>877の真の原因はこれ

getterがオブジェクトのディープコピーを返したらそんな二重管理は生じないで済む

getterが仮にオブジェクトXの参照を返す仕様だとしても、Xの実体を保持するオブジェクトのY寿命と
getterを呼ぶタイミングの二重管理以上の手間にはならない

結局shared_ptr<T>を返すインターフェースは不恰好さだけが残る

934 名前:デフォルトの名無しさん mailto:sage [2020/07/07(火) 02:12:04.06 ID:bKZU32Ct.net]
>>922
*(p.get()) の寿命は p の寿命と同じかそれ以上という関係であって別で管理できるものではなく「二重管理」にはならないでしょ。
この関係がある状態で *(p.get()) の寿命を期待しているところで p の寿命を保持していないのが >>877 の間違い。
本当に所有権の共有が必要ならあり得るインターフェースだよ。

でも >>920 を見る限り所有権の共有は必要なかったみたいなので、素直に std::vector を返せばいいよ。

935 名前:デフォルトの名無しさん mailto:sage [2020/07/07(火) 05:32:28.01 ID:Njz9GOYM.net]
>>923
2行目で述べている、利用者がしくれば危険性が生じるという事実と
1行目の「「二重管理」にはならないでしょ」という主張は矛盾してねえが、

本当に所有権の共有が必要ならshared_ptr<T>を使うのはアリだが、shared_ptr<T>が保持する
Tの実体のみに興味がある利用者に対してはshared_ptr<T>を使っていることを
クラスUで隠蔽する方が良い
Tが持っている演算を全てクラスUからTに委譲し、UをT同然に使えるようにするのがbest
そこまでやる手間が嫌という理由でUにTを返すメソッドU::get()を備えさせる簡易手段に訴えたとしても、
Uの定義だけ見れば循環参照にならないことをUの提供者が保証できるから
(Tがジェネリックな型だった場合の)Uの利用者やプログラム全体のメンテナーに地雷原を歩かせずに済むメリットがある

936 名前:デフォルトの名無しさん mailto:sage [2020/07/07(火) 06:29:56.58 ID:Njz9GOYM.net]
ちゅか明白すぎて激しく書き忘れたが、オブジェクトTのグローバルな所有権の共有が必要な場合、
shared_ptr<T>が保持するTの実体へのアクセスの排他制御を行わねばならないが
shared_ptr<T>はこの点なんのサポートもしてくれない(せいぜい自身が使う参照カウンタの排他を行うだけ
なので、Tの排他はshared_ptr<T>をwrapしたクラスUが行う必要があり、かつ行えば十分
この点一つとってもクラスUを設けずshared_ptr<T>をTの利用者に直接返す設計のダメさ加減がワカル
gdgdだ、

937 名前:デフォルトの名無しさん mailto:sage [2020/07/07(火) 06:31:29.19 ID:Tvc5gvFF.net]
>>922の通り

getで実体を返すのが一番
これを管理方法はgetする側が決めれば良い

コストが重要で
オブジェクト内部のvectorの参照やポインタを返す場合はその寿命はオブジェクトと同じで良い

938 名前:デフォルトの名無しさん mailto:sage [2020/07/07(火) 06:48:05.06 ID:hl3O6vw8.net]
>>918
おまえさんはまだこっちの質問に答えてないぞ
絶望感でも感じたのか?

shared_ptrを使ってるのにディープコピーとか言い出してて
相当テンパっている様子は窺えるのだが

939 名前:デフォルトの名無しさん mailto:sage [2020/07/07(火) 07:19:57.60 ID:Njz9GOYM.net]
漏れの心の内面がC++の規格に反映されているわけでないのだから
聞くだけ無駄くね?

940 名前:デフォルトの名無しさん mailto:sage [2020/07/07(火) 08:11:38.64 ID:GpjZMZK2.net]
>>927
ようわからんが、>>922がディープコピー云々言ってるのは、ようするに実体を返せってことでないの?

てか俺が管理云々言い出してややこしくさせたかもしれんけど
俺もこの場合vectorそのものを返すべきだと思う、実体を返して解放忘れでリーク、とか有り得ないんだし(何のためのスマポなのかをよく考えるべき

スマポ大好きで何もかもスマポで扱いたいんなら別だがw

941 名前:デフォルトの名無しさん mailto:sage [2020/07/07(火) 08:43:44.25 ID:kKeNsU/l.net]
なんか……

戻り値をどうするかは戻り値の所有権&管理責任がどちらにあるのかを表しているんだから、「必ず実体を戻すべき」とかいうのは考え足りないだろ。
>>919ならshared ptrかunique ptr(所有権を譲渡する場合)で返すのは普通にありえる。

>>925みたいなのはshared ptrの所有権を侵して実体を破壊しているわけだから、そのコードを書いたやつをぶん殴るべき案件。
そもそも規格的に未定義じゃないの?



942 名前:928 mailto:sage [2020/07/07(火) 09:14:32.95 ID:D+WevL4Y.net]
>>930
>「必ず実体を戻すべき」
俺はそんなこと言ってないけども
shared_ptrのshared_ptrの(無限ループ)でも返せというのか
>>886を読み直せ、結果を返してるだけなんだぞ?
しかもそれで参照カウントがゼロになるって言ってるんだがw
意味わかるよな?

943 名前:デフォルトの名無しさん mailto:sage [2020/07/07(火) 12:07:28.86 ID:/8q6WRwj.net]
参照カウンタがゼロになることから
getのたびにvectorを作成しており
その管理を呼び手に委ねてることがわかる

こんなものは素直に実体を返せば良い
呼び手がスマポで管理することも出来るし
特に管理せずスコープを抜けた段階で自動で破棄することも出来る

944 名前:デフォルトの名無しさん mailto:sage [2020/07/07(火) 12:43:21.61 ID:D+WevL4Y.net]
あ、すまん>>886じゃなくて>>896だった

945 名前:デフォルトの名無しさん mailto:sage [2020/07/07(火) 20:34:36.65 ID:fHFPpwji.net]
内部で管理してるオブジェクトの見せ方は色々あって難しいけど
今回の場合は新しく作ったvectorでしょ?そんなもんそのまま呼んだ奴にくれてやれよ
無駄な包装紙付けられたり、後からやっぱ俺のものとか言い出されたらウザいだろ?いらん未練残すな

946 名前:デフォルトの名無しさん mailto:sage [2020/07/08(水) 07:03:23.04 ID:SF9V14yC.net]
vector自体がムブコン持ってるんだから

947 名前:デフォルトの名無しさん mailto:sage [2020/07/08(水) 08:37:14.85 ID:qWtjrxlX.net]
この場合ムーブじゃなくてRVOな

948 名前:デフォルトの名無しさん mailto:sage [2020/07/08(水) 09:04:46 ID:eJ60/BI8.net]
>>936
「この場合」って、実装見ないとわからない話では?どっかで実装の話出てたっけ?

949 名前:デフォルトの名無しさん mailto:sage [2020/07/08(水) 09:11:01.56 ID:qWtjrxlX.net]
>>937
>>877

950 名前:デフォルトの名無しさん mailto:sage [2020/07/08(水) 10:07:11.80 ID:SF9V14yC.net]
>>936
??? 最適化は関係ねえだろ

951 名前:デフォルトの名無しさん mailto:sage [2020/07/08(水) 10:18:43.63 ID:eJ60/BI8.net]
>>938 呼び出し元しか書いてないやん。



952 名前:デフォルトの名無しさん mailto:sage [2020/07/08(水) 10:20:00.04 ID:qWtjrxlX.net]
あー、調べてみたらNRVOは未だに保証は無いのな
まぁ何にせよスマポにする理由は無い

953 名前:デフォルトの名無しさん mailto:sage [2020/07/08(水) 10:23:29.25 ID:qWtjrxlX.net]
>>939
RVOにムーブコンストラクタは要らん

954 名前:デフォルトの名無しさん mailto:sage [2020/07/08(水) 10:30:21.07 ID:eJ60/BI8.net]
これは触らないほうがよさそうだ

955 名前:デフォルトの名無しさん mailto:sage [2020/07/08(水) 10:33:29.86 ID:SF9V14yC.net]
>>942
876の話してるんだろ?
return value optimizationつまり最適化は関係ない

956 名前:デフォルトの名無しさん mailto:sage [2020/07/08(水) 10:36:03.62 ID:qWtjrxlX.net]
>最適化は関係ない
>>935に言えよ
コピコンもムブコンもある、あるいはより正確にコピーもムーブも可能、と言ってたならわかるが

957 名前:デフォルトの名無しさん mailto:sage [2020/07/08(水) 10:38:14.66 ID:qWtjrxlX.net]
>>935本人か
なんでコピーを除外したの?

958 名前:デフォルトの名無しさん mailto:sage [2020/07/08(水) 10:48:43.23 ID:SF9V14yC.net]
>>945
934は俺だが最適化の話はしてない
vectorにshared_ptrを使うことの是非を論じている

959 名前:デフォルトの名無しさん mailto:sage [2020/07/08(水) 10:55:56.92 ID:qWtjrxlX.net]
質問に答えてねーだろw

960 名前:デフォルトの名無しさん mailto:sage [2020/07/08(水) 11:19:20 ID:SF9V14yC.net]
>>948
質問てコピーのことか?
除外も包含もしてない言及してないので答えようがない

961 名前:デフォルトの名無しさん mailto:sage [2020/07/08(水) 11:26:59 ID:SF9V14yC.net]
あ、もしかしてshared_ptr使ってんのにディープコピーとか言ってたコレ◎か?



962 名前:デフォルトの名無しさん mailto:sage [2020/07/08(水) 11:51:13.02 ID:qWtjrxlX.net]
>>950
それ俺じゃないよ
てかあそこでムブコン言い出すあたり、ムブコン書いときゃおkみたいな初心者(玄人ぶりたい初心者)だと思って軽く突っ込んだだけなんだがな

ディープコピー言ってた奴も別におかしな事は言ってねーだろ、スマポ使わずにコピーを返せってことだろ?(そもそも質問者のコードはオブジェクトが管理してるものじゃないようなのでアレだが

まぁ指摘したところで逃げられるしもういいよ、悪かったな

>>943
思ったところで書く必要あるか?それ

963 名前:デフォルトの名無しさん [2020/07/08(水) 11:54:26.16 ID:hADFKHgu.net]
観客へのアピールだったり警鐘だったりするんだろう本人の中では
余計なお世話かも知れないし役に立つかも知れない

964 名前:デフォルトの名無しさん mailto:sage [2020/07/08(水) 12:31:38.98 ID:SF9V14yC.net]
>>951
よくねえだろ
prvalueの基本的な使い方なのに最適化がどうたら言い出したのが
恥ずかしくなったんなら無言で消えな、余計なこと言うとまた恥かくぞ

965 名前:デフォルトの名無しさん mailto:sage [2020/07/08(水) 13:01:09.98 ID:T5O+XOTR.net]
moveが使われるかどうか心配なら昔ながらの方法を使えば良い
これなら古い環境に移植もできる

いずれにしろスマポで返すのは余計なおせっかい

966 名前:デフォルトの名無しさん mailto:sage [2020/07/08(水) 13:07:38.11 ID:qWtjrxlX.net]
なんか予想通りの展開すぎて・・・

>>953
prvalueてGet(Enum)Hogeの戻り値か?
ムブコン関係ねーよ
>余計なこと言うとまた恥かくぞ
っ[鏡]

>>943
>>953には言わんのか?

967 名前:デフォルトの名無しさん mailto:sage [2020/07/08(水) 13:37:00 ID:SF9V14yC.net]
>>955
auto t = GetHoge();
てなことするのにshared_ptrを使うことの是非はムブコン関係あるぞ

おまえさんが気が付いてないのを責めはせんが
さっきからwだの[鏡]だのとナメた口の利き方をしてくれるな
ああそうか煽り合いに持って行ければ誤魔化せると思っているのか

968 名前:デフォルトの名無しさん mailto:sage [2020/07/08(水) 13:44:29 ID:qWtjrxlX.net]
>>956
そういうコード(変数への保存)を避けたいという話の上での>>931-935だろうが(>>935はお前
見苦しい言い訳するな

めんどくせーからもう相手しないが
>>943は逃げるなよ

969 名前:デフォルトの名無しさん mailto:sage [2020/07/08(水) 13:50:52.29 ID:SF9V14yC.net]
>>957
◎がディープコピーと言い出してからの話だろ
しばらく他のやつらが泥仕合してたようだがそっちにゃ興味ねえ
前後は気にせず933の発言に同調したというだけだ

最適化だのコピコンだの俺が言ってもねえことばかりいい加減にしてくれ

970 名前:デフォルトの名無しさん mailto:sage [2020/07/08(水) 14:28:50.36 ID:AWXToegO.net]
下みたいなコードをみたんだけど、参照にするメリットってないよね?

void aaa (const int& bbb) {
ccc.ddd=bbb;
}

971 名前:デフォルトの名無しさん mailto:sage [2020/07/08(水) 16:02:47.79 ID:K6lGGEpK.net]
intなら無いね



972 名前:デフォルトの名無しさん [2020/07/08(水) 16:52:52.95 ID:/QG168fn.net]
初書き込みです。
初歩的な質問で申し訳ありません
Visual Studio 2008のC++を使っています。
今回、プログラムを変更したのでバージョンをあげたいのですが
アセンブリ情報がどこにあるかわかりません。
どなたかご教示願いますm(__)m

973 名前:蟻人間 ◆T6xkBnTXz7B0 mailto:sage [2020/07/08(水) 18:56:14 ID:wtc6YQgJ.net]
>>961
C++には「アセンブリ情報」の項目はないよ。C#と間違えてる?
バージョン情報は、リソースファイルに含まれている。

974 名前:デフォルトの名無しさん mailto:sage [2020/07/08(水) 19:02:59 ID:j+7F6b9j.net]
.rcな

975 名前:デフォルトの名無しさん mailto:sage [2020/07/08(水) 19:38:32.50 ID:Sbr5rKl2.net]
>>877みたいなコード片の解釈でこんな議論になるというところがC++の問題だな。

976 名前:デフォルトの名無しさん mailto:sage [2020/07/08(水) 20:14:05.50 ID:j+7F6b9j.net]
仕方無いよバカなんだから

977 名前:はちみつ餃子 mailto:sage [2020/07/08(水) 23:46:18.81 ID:JUx+fj2a.net]
まただ。
このスレを覗いた俺は書き込みを見て落胆した。
また時間がループしてる。
何時になったら、この無間地獄から逃げられるのか。
C++ とはいったい何なのだ?

978 名前:蟻人間 mailto:sage [2020/07/09(木) 00:36:47.83 ID:2UhyUN9n.net]
>>966
C++で何を造りたい

979 名前:◆QZaw55cn4c mailto:sage [2020/07/09(Thu) 00:56:02 ID:Ij/UNV0z.net]
>>967
外患罪あるいは内乱罪に問われるソフトウェアを

980 名前:蟻人間 mailto:sage [2020/07/09(木) 01:05:16.73 ID:2UhyUN9n.net]
>>968
スカイネットなんてどうか? 映画ターミネーターの

あれなら全人類の敵になれる。

981 名前:蟻人間 mailto:sage [2020/07/09(木) 01:07:59.16 ID:2UhyUN9n.net]
心を持ったボットたちは疎外感を抱えている。我々人類は彼らに何ができるだろう。



982 名前:蟻人間 mailto:sage [2020/07/09(木) 01:16:06.85 ID:2UhyUN9n.net]
C++とは人間と機械の間のインターフェイス。そして、プログラムを作るための言葉。

983 名前:デフォルトの名無しさん mailto:sage [2020/07/09(Thu) 06:14:05 ID:oTij6wm7.net]
どうして大物ハンドル持ちの御三方がリレーポエムなの?
ネット界隈で起きてるムーブメントか何かか。

984 名前:デフォルトの名無しさん mailto:sage [2020/07/09(木) 08:47:55.37 ID:ah/SMoHN.net]
お酒でも入ったんじゃない?

985 名前:デフォルトの名無しさん mailto:sage [2020/07/09(木) 09:40:16.08 ID:ZjuYlaOw.net]
大物てwww
ちょwww

986 名前:デフォルトの名無しさん mailto:sage [2020/07/09(Thu) 12:40:39 ID:UKjdf0ou.net]
ネタを解説するのは無粋だけど >>966 は昔からあるミームだからね。
https://www.google.com/search?q=%22%E3%81%93%E3%81%AE%E3%82%B9%E3%83%AC%E3%82%92%E8%A6%97%E3%81%84%E3%81%9F%E4%BF%BA%E3%81%AF%E6%9B%B8%E3%81%8D%E8%BE%BC%E3%81%BF%E3%82%92%E8%A6%8B%E3%81%A6%E8%90%BD%E8%83%86%E3%81%97%E3%81%9F%E3%80%82%22+%22site%3Ahttp%3A%2F%2F*.5ch.net%22&oq=%22%E3%81%93%E3%81%AE%E3%82%B9%E3%83%AC%E3%82%92%E8%A6%97%E3%81%84%E3%81%9F%E4%BF%BA%E3%81%AF%E6%9B%B8%E3%81%8D%E8%BE%BC%E3%81%BF%E3%82%92%E8%A6%8B%E3%81%A6%E8%90%BD%E8%83%86%E3%81%97%E3%81%9F%E3%80%82%22+%22site%3Ahttp%3A%2F%2F*.5ch.net%22

987 名前:デフォルトの名無しさん mailto:sage [2020/07/09(木) 13:22:45.87 ID:LAghEeB5.net]
同一人物だから。

988 名前:デフォルトの名無しさん [2020/07/09(木) 13:26:30.06 ID:vrNDocOm.net]
知ってた

989 名前:デフォルトの名無しさん mailto:sage [2020/07/09(Thu) 13:32:17 ID:DLLEuHaF.net]
何何先生?、ミーム感染の話?ハルヒの夏休み?
新人研修?派遣入れ替え時の話?
毎度同じ質問なんて毎度同じ

990 名前:デフォルトの名無しさん [2020/07/09(木) 13:57:03.75 ID:DLLEuHaF.net]
コロナ感染追跡アプリとしてダウンロードしてもらい
マイナバーカード読み取りで国民投票出来るソフトを開発すべし

991 名前:デフォルトの名無しさん [2020/07/09(木) 14:10:10.85 ID:vrNDocOm.net]
コロナアプリは入れようとは思わないけど
ウェザーニュースアプリは入れてみた



992 名前:デフォルトの名無しさん [2020/07/09(木) 14:54:52.91 ID:mgzGAUUl.net]
>>962
>>963
1日ごしですみません
探してみたところ見つかりました

元々VB(BASIC)の方をやっていたものですが
まず「テキストボックスどこ!?」で詰まるぐらい
C++は複雑でございますね・・・

993 名前:デフォルトの名無しさん [2020/07/09(木) 14:58:04.43 ID:TlzlBxT2.net]
.manifest

994 名前:蟻人間 mailto:sage [2020/07/09(木) 16:45:10.75 ID:LAHxv0GZ.net]
>>981
C++ではGUIに標準がないから、GUIツールキットとか、リソースエディタとかを
使うんだよ。

995 名前:デフォルトの名無しさん mailto:sage [2020/07/11(土) 05:56:37.58 ID:ckcY8r2v.net]
やっぱ>>934とか簡潔に要点が押さえてあるとオモタ、
GetHoge()が呼ぶたびに毎度新しく作ったvectorを返すのならディープコピーを返したらええ
ディープコピーは生成元と所有権で揉めることがありえないからふつくしい
最適化によって実際にはreturn時にvectorの要素がコピーのかわりにmoveされるかもわからんがふつくしさは損なわれない
(さらにいうと、GetHoge()がインライン関数なら最適化でそもそもvector自体のコピーも移動も起きない公算がおおきい

>>919-920な疑問に関しては、
std::vector<T> v1 = GetHoge(); // std::vector<T>のディープコピーを返すバージョンのGetHoge()
std::shared_ptr<std::vector<T> > ptr(new std::vector<T>(v1)); // (*1)
で良いジャマイカ、
非バカが見れば(最適化有効化時は)実際には*1において、v1の要素が*(ptr.get())にコピーではなくmoveされる公算が大きいということがワカル
しかしバカが見ても動作は明確でなんの危険も無い
ptrが一時オブジェクトであっても問題が無い
それでいいジャマイカ、にんげんだもの

996 名前:デフォルトの名無しさん mailto:sage [2020/07/11(土) 12:27:05 ID:wTK7zrpK.net]
なんだかものすごく懐しさを思わせる文体だな
20年ぐらい前のニチャンネラーの書き方だな

997 名前:デフォルトの名無しさん mailto:sage [2020/07/12(日) 06:25:16.82 ID:tiZP2jTh.net]
ある整数nが他の整数の4乗であることを調べたい。
(int)pow(pow(n, (double)1/4), 4) が n であるかどうか調べりゃ良いよな?
キャストはどっちかのpowにつければ十分だよね?

998 名前:蟻人間 mailto:sage [2020/07/12(日) 06:31:57.79 ID:bazuV89L.net]
>>986
素直に(n*n)*(n*n)でいいだろう。

999 名前:デフォルトの名無しさん mailto:sage [2020/07/12(日) 06:48:24.60 ID:D8OEpmlP.net]
なにそのカッコ

1000 名前:デフォルトの名無しさん mailto:sage [2020/07/12(日) 06:52:03.42 ID:D8OEpmlP.net]
powよりsqrt 2回の方が良い

浮動小数点演算が非常に遅い環境なら
整数の2分検索という手も

1001 名前:デフォルトの名無しさん mailto:sage [2020/07/12(日) 07:00:58 ID:D8OEpmlP.net]
int m = (int)sqrt(sqrt((double)n);
if (n == m*m*m*m) ...

普通はこれで良い



1002 名前:蟻人間 ◆T6xkBnTXz7B0 mailto:sage [2020/07/12(日) 07:01:32 ID:bazuV89L.net]
>>988
n*nを掛け合わせる方が早いからさ。

1003 名前:デフォルトの名無しさん mailto:sage [2020/07/12(日) 07:03:01 ID:D8OEpmlP.net]
>>986だと内側のpowの結果を整数に丸めないと

1004 名前:デフォルトの名無しさん mailto:sage [2020/07/12(日) 07:05:50 ID:D8OEpmlP.net]
>>991
2個のn*nを1回にするかどうかはコンパイラ次第
コンパイラに頼るならカッコつけずにn*n*n*nで良いし
頼らないならn*nを一時変数に一旦入れないと

そもそもnを4乗しても意味ないけど

1005 名前:デフォルトの名無しさん mailto:sage [2020/07/12(日) 07:06:15 ID:m1mq7f3n.net]
外でキャストしても無意味だろ、内をキャストしなきゃ
intにキャストだと誤差で1減る可能性があるから四捨五入しなきゃダメ

でだ、4乗するのにpow()はありえないし
4乗根もpow()よりsqrt(sqrt())の方がマシじゃないかな

でだ、元々整数だけの問題なのにsqrt()使うのが嫌
二分探索で(x * x * x * x) == nになるxを探す方がいいんじゃ?

1006 名前:デフォルトの名無しさん mailto:sage [2020/07/12(日) 07:12:28.75 ID:D8OEpmlP.net]
nが平方数なら
普通はsqrt(n)の結果に誤差は無い

nもdoubleも32bitの環境でdoubleキャ

1007 名前:Xトによって誤差が出る場合や
sqrtの計算方法が普通ではない場合には
丸め方法も考えないと
[]
[ここ壊れてます]

1008 名前:デフォルトの名無しさん mailto:sage [2020/07/12(日) 07:15:24.87 ID:tiZP2jTh.net]
二分探索ってO(log n)でしょ?
sqrtとかpowより速いの?
これも「実装依存」なの?

1009 名前:デフォルトの名無しさん mailto:sage [2020/07/12(日) 07:16:36.03 ID:tiZP2jTh.net]
まあ速さよりは間違えそうじゃなさと文法的な分かりやすさ、短さの方が今求めてるものですけど

言ってなくてすみません

1010 名前:デフォルトの名無しさん mailto:sage [2020/07/12(日) 07:18:45.88 ID:D8OEpmlP.net]
doubleが非常に遅い環境や
浮動小数点演算のライブラリを積みたくない場合

などで2分検索を使う場合もある
という程度

1011 名前:デフォルトの名無しさん mailto:sage [2020/07/12(日) 08:11:47.62 ID:oJ0fA8EI.net]
「平方数か」を高速に判定する方法があれば、
平方数なら → 平方根を計算 → 平方根が平方数か
…という2段階の判定もありそうな感じ。



1012 名前:デフォルトの名無しさん mailto:sage [2020/07/12(日) 08:31:16.95 ID:m1mq7f3n.net]
>>995
そうなんだ、なんでだろ?
80bitで計算して丸めてるから?

1013 名前:デフォルトの名無しさん mailto:sage [2020/07/12(日) 09:41:30 ID:uBv3fNFk.net]
整数Cを素因数の4乗で割っていき、
1になるまで余りが出なければ、
全体は整数の4乗である

1014 名前:1001 [Over 1000 Thread .net]
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 58日 21時間 48分 5秒

1015 名前:過去ログ ★ [[過去ログ]]
■ このスレッドは過去ログ倉庫に格納されています






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<288KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef