C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレにお願いします。
前スレ
C++相談室 part150
https://mevius.5ch.net/test/read.cgi/tech/1584975873/
このスレもよろしくね。
【初心者歓迎】C/C++室 Ver.105【環境依存OK】
http://mevius.5ch.net/test/read.cgi/tech/1556142878/
■長いソースを貼るときはここへ。■
http://codepad.org/
https://ideone.com/
[C++ FAQ]
https://isocpp.org/wiki/faq/
http://www.bohyoh.com/CandCPP/FAQ/ (日本語)
テンプレここまで
探検
C++相談室 part151
■ このスレッドは過去ログ倉庫に格納されています
2020/05/14(木) 11:53:25.59ID:ZPCfyTux
261デフォルトの名無しさん
2020/06/09(火) 16:12:25.38ID:SETbyCsO >>256
もし、CTRL+Sを処理するイベントハンドラの中で、単純に CloseHandle()を自分で呼び出して
失敗した場合であれば、保存に失敗した事をAfxMessageBox()で知らせた後、なんとか今までの
メモリ中のデータだけは壊さずに処理できればベスト。
しかし、他の何らかの例外が発生した時に、RAIIによって自動的に呼び出されたデストラクタの中で
CloseHandle()に失敗した場合には、対処が難しそう。
テストも難しいし、余りそういう状況は起きないので優先順位は低いが。
もし、CTRL+Sを処理するイベントハンドラの中で、単純に CloseHandle()を自分で呼び出して
失敗した場合であれば、保存に失敗した事をAfxMessageBox()で知らせた後、なんとか今までの
メモリ中のデータだけは壊さずに処理できればベスト。
しかし、他の何らかの例外が発生した時に、RAIIによって自動的に呼び出されたデストラクタの中で
CloseHandle()に失敗した場合には、対処が難しそう。
テストも難しいし、余りそういう状況は起きないので優先順位は低いが。
262デフォルトの名無しさん
2020/06/09(火) 17:15:04.89ID:nNNGB7r+ >>260
std::pair<int, SomeObj> を格納するコンテナと
「int部分とある値とのビットORを結果とする述語」を
std::copy_if() に渡すような話かな。
「任意オブジェ」部分が要素ごとに異なる、だと難問な気がするけど。
std::pair<int, SomeObj> を格納するコンテナと
「int部分とある値とのビットORを結果とする述語」を
std::copy_if() に渡すような話かな。
「任意オブジェ」部分が要素ごとに異なる、だと難問な気がするけど。
263デフォルトの名無しさん
2020/06/09(火) 17:30:16.71ID:n28tZ6EV 論理積ではなく?
264デフォルトの名無しさん
2020/06/09(火) 17:42:20.88ID:nNNGB7r+ 確かに論理和だと「つまらない」結果になりそうね。
普通の使い方なら論理積で抽出か。
排他的論理和は「もっと面白い」かも知れんけど。
普通の使い方なら論理積で抽出か。
排他的論理和は「もっと面白い」かも知れんけど。
265デフォルトの名無しさん
2020/06/09(火) 22:35:23.41ID:FUnSNOef266デフォルトの名無しさん
2020/06/10(水) 05:39:12.94ID:67cF/bBY >>256
「ログファイルなので書込みに失敗しても大勢に影響が無い」とか
「作業用ファイルfは書いた後必ず誰かがリードオープンするから書込みに失敗していたらそこでワカルから書込みのエラーチェックを省略する」
みたいな判断はアプリの設計としてはアリかもしれないが、CMyHandleみたいな汎用部品的に使われ得る低水準クラスではナシ
これをアリだと思う香具師はお気楽すぐる、
「ログファイルなので書込みに失敗しても大勢に影響が無い」とか
「作業用ファイルfは書いた後必ず誰かがリードオープンするから書込みに失敗していたらそこでワカルから書込みのエラーチェックを省略する」
みたいな判断はアプリの設計としてはアリかもしれないが、CMyHandleみたいな汎用部品的に使われ得る低水準クラスではナシ
これをアリだと思う香具師はお気楽すぐる、
268デフォルトの名無しさん
2020/06/10(水) 07:23:10.62ID:itI4VuCe てか、自動解放するクラス作っても手動解放する手段残しておけば、使う側で特別な処理は出来るんだよね
269デフォルトの名無しさん
2020/06/10(水) 08:13:57.83ID:V+CQutVh C++ではexitをD組にして欲しい
270デフォルトの名無しさん
2020/06/10(水) 12:31:11.80ID:BPKUZfdj >>267 通知は欲しいかな。
黙って動作が続くくよりは terminate() のほうがマシだとも思うし。汎用部品ならなおさら。
破棄失敗する可能性のあるリソースの RAII wrapper にはエラー通知できる
close() なりの破棄操作を別に用意しておけという話で済むと思う。
黙って動作が続くくよりは terminate() のほうがマシだとも思うし。汎用部品ならなおさら。
破棄失敗する可能性のあるリソースの RAII wrapper にはエラー通知できる
close() なりの破棄操作を別に用意しておけという話で済むと思う。
>>270
通知って簡単にいいますけれども、その例えば fclose() 失敗の通知をどこに送り、そして送った先では何をするのですか?
通知をもらって何か手を打てるのですか?
汎用部品/ライブラリの作法ですか
理解はできますが、しかし、何もできないのなら、あるいは何もできないことがわかっているのなら、特段の失着にはみえませんね…
通知って簡単にいいますけれども、その例えば fclose() 失敗の通知をどこに送り、そして送った先では何をするのですか?
通知をもらって何か手を打てるのですか?
汎用部品/ライブラリの作法ですか
理解はできますが、しかし、何もできないのなら、あるいは何もできないことがわかっているのなら、特段の失着にはみえませんね…
272デフォルトの名無しさん
2020/06/10(水) 21:56:31.91ID:yfneRFZn 大事なデータを保存したファイルのfclose()が失敗したらどうするかって?
場所変えて保存を試みるに決まってるだろ
それくらいしないプログラムは売り物にならないぞ
場所変えて保存を試みるに決まってるだろ
それくらいしないプログラムは売り物にならないぞ
273デフォルトの名無しさん
2020/06/10(水) 22:20:00.38ID:yQDU6thd そもそも仕様で指定があるならそのように書くだけなんじゃ
274デフォルトの名無しさん
2020/06/11(木) 00:27:51.81ID:flOLYJrB >>271
たとえばコンソールアプリなら標準エラーに情報を出したうえで終了コードに反映して、
コマンドが失敗したのを見たユーザーが何をするか考えるっていうのはごく当たり前のことでしょ。
たとえばストレージ容量が足りないとして失敗したなら容量を確保して再実行すればいい。
fclose() の戻り値を捨ててるプログラムは現実としてたぶん多いんだけど、
そんなソフトがたとえばサーバー内でストレージ容量不足を数か月にわたって闇に葬り続け、
何かおかしいと気付いたサーバー管理者が自動スクリプトを緻密にトレースした結果、
保存されているはずの情報がもはやどこにも存在しないと気付いた時の怒り憎しみ悲しみを想像されたい。
少なくとも成功したと誤解しないのが重要。
たとえばコンソールアプリなら標準エラーに情報を出したうえで終了コードに反映して、
コマンドが失敗したのを見たユーザーが何をするか考えるっていうのはごく当たり前のことでしょ。
たとえばストレージ容量が足りないとして失敗したなら容量を確保して再実行すればいい。
fclose() の戻り値を捨ててるプログラムは現実としてたぶん多いんだけど、
そんなソフトがたとえばサーバー内でストレージ容量不足を数か月にわたって闇に葬り続け、
何かおかしいと気付いたサーバー管理者が自動スクリプトを緻密にトレースした結果、
保存されているはずの情報がもはやどこにも存在しないと気付いた時の怒り憎しみ悲しみを想像されたい。
少なくとも成功したと誤解しないのが重要。
275デフォルトの名無しさん
2020/06/11(木) 06:18:34.85ID:m7gaY4Qp そんな状況じゃopenも失敗してるだろうな
276デフォルトの名無しさん
2020/06/11(木) 09:58:48.19ID:Th6rh/3U >>274
実はそれがRAIIの限界なんだよ。
ちゃんと明示的に fclose() してその戻り値をチェックするのが一番安全。
例外安全性のためにRAIIを使うべきという人が居るけど、それで勝手に
デストラクタ内でfclose()して容量不足やディスクエラーで書き込み失敗した時には、
多くの場合、対処に困る。
でも、例外安全のためにはそうせざるを得ないかも知れない。
ということは、そもそも論になり、例外の throw、catch機構自体が安全に扱うのが
難しいという結論に至り、議論百出する。
実はそれがRAIIの限界なんだよ。
ちゃんと明示的に fclose() してその戻り値をチェックするのが一番安全。
例外安全性のためにRAIIを使うべきという人が居るけど、それで勝手に
デストラクタ内でfclose()して容量不足やディスクエラーで書き込み失敗した時には、
多くの場合、対処に困る。
でも、例外安全のためにはそうせざるを得ないかも知れない。
ということは、そもそも論になり、例外の throw、catch機構自体が安全に扱うのが
難しいという結論に至り、議論百出する。
277デフォルトの名無しさん
2020/06/11(木) 10:29:20.16ID:flOLYJrB278デフォルトの名無しさん
2020/06/11(木) 10:38:30.62ID:3eiGl155 上から目線なくせに脇が甘いな
279はちみつ餃子 ◆8X2XSCHEME
2020/06/11(木) 11:08:58.38ID:7wv0rqaB デストラクタ内でエラーが発生する可能性があってそれに対処が必要なら
例外の送出とか言ってないでデストラクタ内で対処してしまえよ。
汎用的な部品にし難いのはしゃーないやろ。
実際に汎用的ではないんだから。
例外の送出とか言ってないでデストラクタ内で対処してしまえよ。
汎用的な部品にし難いのはしゃーないやろ。
実際に汎用的ではないんだから。
280デフォルトの名無しさん
2020/06/11(木) 11:47:39.02ID:DcPEy/qZ おまいら (f)printf() の戻り値もちゃんと毎回観てるか?
281デフォルトの名無しさん
2020/06/11(木) 11:54:46.87ID:Th6rh/3U282デフォルトの名無しさん
2020/06/11(木) 11:56:16.72ID:Th6rh/3U283デフォルトの名無しさん
2020/06/11(木) 12:17:49.27ID:3eiGl155 そんなに難しいか?
深刻な事態が疑われるならシステムモーダルダイアログなり何なりすることあるだろ
あくまでOSではなくアプリとして事後条件が保証できない場合はterminateを呼び出して
OSに事故としての扱いをさせるのが「難しい」のは思いつかないだけじゃねえだろな
プログラミング以外の仕事でも事故はまず報連相
1人で握りつぶそうとするのは学生気分が抜けてないやつのすることだ
深刻な事態が疑われるならシステムモーダルダイアログなり何なりすることあるだろ
あくまでOSではなくアプリとして事後条件が保証できない場合はterminateを呼び出して
OSに事故としての扱いをさせるのが「難しい」のは思いつかないだけじゃねえだろな
プログラミング以外の仕事でも事故はまず報連相
1人で握りつぶそうとするのは学生気分が抜けてないやつのすることだ
284デフォルトの名無しさん
2020/06/11(木) 12:19:04.03ID:flOLYJrB285デフォルトの名無しさん
2020/06/11(木) 12:21:07.06ID:flOLYJrB >>283 そっか GUI ならダイアログ使えるから、通知するだけなら簡単だね。
286デフォルトの名無しさん
2020/06/11(木) 12:22:43.78ID:Th6rh/3U287デフォルトの名無しさん
2020/06/11(木) 12:29:07.29ID:Th6rh/3U >>283
Exceptionをthrowした時の自動フォローアップとしてRAIIのデストラクタが呼び出される。
それが呼び出されるのは原則的にどこかでかは余り仮定できない。
ということは、非常に変なタイミングで fclose()に失敗することがある。
メッセージボックスを出すと、そこでイベントに対するメッセージループが形成されるので、
タイマーイベントのハンドラのOnTimer()などが起動してしまうこともある。
OnTimer()を、Exceptionがthrowされた状態で実行してよいかどうかは注意を要する事だ。
また、アプリの初期化処理の InitInstance()や終了処理のExitInstance()の中で、RAIIの
デストラクタが呼び出されてしまう場合もあるかも知れず、その中でメッセージボックスを
出すと思わぬ問題が生じるかもしれない。
生じないかも知れないが。
ただ、Exceptionがthrowされたということは何か異常が生じているということで、
それがたまたまファイルに関するものであったとしたら、二重三重に、ファイル関連で
エラーが生じてしまい、何か危険な状態に陥ってしまう可能性も有るかも知れない。
そういう微妙な配慮が必要となる。
Exceptionをthrowした時の自動フォローアップとしてRAIIのデストラクタが呼び出される。
それが呼び出されるのは原則的にどこかでかは余り仮定できない。
ということは、非常に変なタイミングで fclose()に失敗することがある。
メッセージボックスを出すと、そこでイベントに対するメッセージループが形成されるので、
タイマーイベントのハンドラのOnTimer()などが起動してしまうこともある。
OnTimer()を、Exceptionがthrowされた状態で実行してよいかどうかは注意を要する事だ。
また、アプリの初期化処理の InitInstance()や終了処理のExitInstance()の中で、RAIIの
デストラクタが呼び出されてしまう場合もあるかも知れず、その中でメッセージボックスを
出すと思わぬ問題が生じるかもしれない。
生じないかも知れないが。
ただ、Exceptionがthrowされたということは何か異常が生じているということで、
それがたまたまファイルに関するものであったとしたら、二重三重に、ファイル関連で
エラーが生じてしまい、何か危険な状態に陥ってしまう可能性も有るかも知れない。
そういう微妙な配慮が必要となる。
288デフォルトの名無しさん
2020/06/11(木) 12:33:42.17ID:Th6rh/3U >>287
もっといえば、Exceptionのthrowはどこで起きるかは仮定しにくいものなので、
何らかのダイアログを出すための初期化処理の中で生じることも有るかも知れない。
そういう場合にたまたま、関数の呼びだし元へ どんどん Exception の Unwinding
が生じて、RAIIのデストラクタで fclose()が呼び出される可能性も有るかも知れない。
そうなって、さらに、その fclose()がエラー終了する場合がある。
ダイアログの生成に失敗したタイミングで、エラーメッセージの表示のために、
メッセージボックスのダイアログを出すことになれば、もしかしたらかなり危険な
バグを含むことになってしまうかも知れない。
もっといえば、Exceptionのthrowはどこで起きるかは仮定しにくいものなので、
何らかのダイアログを出すための初期化処理の中で生じることも有るかも知れない。
そういう場合にたまたま、関数の呼びだし元へ どんどん Exception の Unwinding
が生じて、RAIIのデストラクタで fclose()が呼び出される可能性も有るかも知れない。
そうなって、さらに、その fclose()がエラー終了する場合がある。
ダイアログの生成に失敗したタイミングで、エラーメッセージの表示のために、
メッセージボックスのダイアログを出すことになれば、もしかしたらかなり危険な
バグを含むことになってしまうかも知れない。
289デフォルトの名無しさん
2020/06/11(木) 12:49:26.16ID:flOLYJrB >>286-288
ごめん、別の例外でスタック巻き戻し中の fclose() 失敗は無視でもいい想定だった。
元の例外が通知されればそれでいいだろうと。
破棄操作を提供すれば済むっていうのは、たとえば fstream について
正常フローから close() 呼び出せば fclose() の失敗は普通に処理できるっていう意味。
エラー発生後の後処理でのエラーについてはもはや例外処理機構とか RAII とか関係なく
エラー処理一般で難しさは変わらないのでは?
ごめん、別の例外でスタック巻き戻し中の fclose() 失敗は無視でもいい想定だった。
元の例外が通知されればそれでいいだろうと。
破棄操作を提供すれば済むっていうのは、たとえば fstream について
正常フローから close() 呼び出せば fclose() の失敗は普通に処理できるっていう意味。
エラー発生後の後処理でのエラーについてはもはや例外処理機構とか RAII とか関係なく
エラー処理一般で難しさは変わらないのでは?
290デフォルトの名無しさん
2020/06/11(木) 13:14:41.21ID:4Jo+eUkD291デフォルトの名無しさん
2020/06/11(木) 17:56:16.10ID:+WuQ8P1K そんなに大事なデータならverifyするだろ
292デフォルトの名無しさん
2020/06/13(土) 16:05:30.52ID:ifM7/RIh >>271
>知って簡単にいいますけれども、その例えば fclose() 失敗の通知をどこに送り、そして送った先では何をするのですか?
最終的にはユーザーに通知する
>通知をもらって何か手を打てるのですか?
ユーザーが通知に従い手を打てる
>>279
デストラクタ内での例外を送出したら即アプリが死ぬハズ
コアを吐いてくれたら通知にあたる情報が取り出せるかもしれないが美しくない
>>287
異常の内容をユーザーに通知することを目的とするなら
>エラーの通知先オブジェクトへのポインタをCMyXは持つ(>>252)
で事足りる
メッセージループは、通知先オブジェクトが1個だけもちさえすればユーザーへの通知の役目を果たせる
CMyXのようなケースは通知先オブジェクトを保持するオブジェクトからFactoryMethodパターンでインスタンス化
するのがいかにもOOP的で個人的には好み(CMyXのインスタンス化のときに通知先を確実に渡せる
>知って簡単にいいますけれども、その例えば fclose() 失敗の通知をどこに送り、そして送った先では何をするのですか?
最終的にはユーザーに通知する
>通知をもらって何か手を打てるのですか?
ユーザーが通知に従い手を打てる
>>279
デストラクタ内での例外を送出したら即アプリが死ぬハズ
コアを吐いてくれたら通知にあたる情報が取り出せるかもしれないが美しくない
>>287
異常の内容をユーザーに通知することを目的とするなら
>エラーの通知先オブジェクトへのポインタをCMyXは持つ(>>252)
で事足りる
メッセージループは、通知先オブジェクトが1個だけもちさえすればユーザーへの通知の役目を果たせる
CMyXのようなケースは通知先オブジェクトを保持するオブジェクトからFactoryMethodパターンでインスタンス化
するのがいかにもOOP的で個人的には好み(CMyXのインスタンス化のときに通知先を確実に渡せる
293はちみつ餃子 ◆8X2XSCHEME
2020/06/13(土) 16:59:34.64ID:1nypd8FJ >>292
私が書いた >>279 ではデストラクタ内で対処を完結させろ (例外を投げずに済ますために) と書いてあるつもりなんだが、お前にはそれが読み取れなかったか?
ちなみに、現在の C++ ではデストラクタ (と delete) はデフォルトで noexcept で修飾されているものと見なされる。
これは例外を外へ送出しないことを保障するんだが、内部で例外が発生しないとは保証されない。
もし発生した例外を内部でキャッチせずに外へ出ていこうとしたら std::terminate() が呼び出される。
(スタックの巻き戻しは起こらずに即死するかもしれない。)
陽に noexcept(false) を指定したらデストラクタから例外を送出することは可能。
ただし、スタックの巻き戻し中に起動される別のデストラクタから例外が送出されると死ぬ。
普通は色々なライブラリを組み合わせるから問題が出ないようにするには
一貫してデストラクタからは例外を投げないのが妥当な設計だと考えられているってだけ。
私が書いた >>279 ではデストラクタ内で対処を完結させろ (例外を投げずに済ますために) と書いてあるつもりなんだが、お前にはそれが読み取れなかったか?
ちなみに、現在の C++ ではデストラクタ (と delete) はデフォルトで noexcept で修飾されているものと見なされる。
これは例外を外へ送出しないことを保障するんだが、内部で例外が発生しないとは保証されない。
もし発生した例外を内部でキャッチせずに外へ出ていこうとしたら std::terminate() が呼び出される。
(スタックの巻き戻しは起こらずに即死するかもしれない。)
陽に noexcept(false) を指定したらデストラクタから例外を送出することは可能。
ただし、スタックの巻き戻し中に起動される別のデストラクタから例外が送出されると死ぬ。
普通は色々なライブラリを組み合わせるから問題が出ないようにするには
一貫してデストラクタからは例外を投げないのが妥当な設計だと考えられているってだけ。
294デフォルトの名無しさん
2020/06/13(土) 17:06:07.88ID:ifM7/RIh295デフォルトの名無しさん
2020/06/13(土) 20:11:16.15ID:K/U+GWpl 個人でc++使うことは少ないですか?
C#やelectronと比べて何倍手間がかかりますか?
2dのタイルマップエディタのようなものを作りたいのです、、、
https://www.mapeditor.org/
C#やelectronと比べて何倍手間がかかりますか?
2dのタイルマップエディタのようなものを作りたいのです、、、
https://www.mapeditor.org/
296デフォルトの名無しさん
2020/06/13(土) 20:19:12.06ID:lPN2rvMv 挫折するリスクも加味すると100倍くらいじゃないかな
297デフォルトの名無しさん
2020/06/13(土) 20:42:52.21ID:AVSH26bs >>295
個人の場合、実はC++は適している。
むしろ、大人数の場合、いろいろなレベルの人がいるので速度を落としてでも、
誰でも使えるような言語を使おうとする企業が多い。
ちゃんとしたものを作りたかったら、C++は最良の選択。
個人の場合、実はC++は適している。
むしろ、大人数の場合、いろいろなレベルの人がいるので速度を落としてでも、
誰でも使えるような言語を使おうとする企業が多い。
ちゃんとしたものを作りたかったら、C++は最良の選択。
298デフォルトの名無しさん
2020/06/13(土) 20:55:51.74ID:AVSH26bs ところで、全く関係ないけど、昔は、
標準変換(Standard Conversions)の1つに、
「Reference Conversions(参照変換)」
という項目があったのに、C++17では、Overload Resolution関連で
「Reference Binding(参照束縛)」
という項目だけになってしまった、という認識であってますかね?
もしかしたら古すぎて、もう分からないかな。
標準変換(Standard Conversions)の1つに、
「Reference Conversions(参照変換)」
という項目があったのに、C++17では、Overload Resolution関連で
「Reference Binding(参照束縛)」
という項目だけになってしまった、という認識であってますかね?
もしかしたら古すぎて、もう分からないかな。
299デフォルトの名無しさん
2020/06/13(土) 21:10:55.91ID:XHF92Eb6 c++がどうこういうこと自体無意味な気分。
OSとコンパイラのバージョン指定でもせん限り、特定の議論にもなりゃしない。
OSとコンパイラのバージョン指定でもせん限り、特定の議論にもなりゃしない。
300デフォルトの名無しさん
2020/06/13(土) 22:13:05.14ID:rMzKFBuy これから始めようと思うのですが
C++とC♯の大きな違いは何ですか
どっちから先の方が良いですか?
C++とC♯の大きな違いは何ですか
どっちから先の方が良いですか?
301デフォルトの名無しさん
2020/06/13(土) 23:19:47.34ID:B/JuT+NG 何作りたいかによるとしか言いようがない
302デフォルトの名無しさん
2020/06/13(土) 23:29:25.22ID:dAI/jSW6 あーじゃあ、C++には何が出来なかったせいで
後からC♯が作られたの?
後からC♯が作られたの?
303デフォルトの名無しさん
2020/06/14(日) 00:35:35.69ID:0sKu6MyV 違うよ
304デフォルトの名無しさん
2020/06/14(日) 00:45:05.04ID:lm4ZS132 んーでは、C++が劣っていてC♯が作られた理由は?
305デフォルトの名無しさん
2020/06/14(日) 00:55:29.50ID:7AEk3bXh インタープリ夛ー
306デフォルトの名無しさん
2020/06/14(日) 00:58:40.28ID:g+gmh/oa Javaの代わりが欲しかっただけであって優劣の問題はあまり関係がない
が結局Javaの領域には食い込めず、スクリプト言語の代わりになった
自由度を奪う代わりに楽に書けるみたいな
結局自由度が必要なのでC++から離れられないので余計書くのがつらい仕様になった
Win32APIのインクルードくらいSDKにまとめとけやPinヴォケって感じ
が結局Javaの領域には食い込めず、スクリプト言語の代わりになった
自由度を奪う代わりに楽に書けるみたいな
結局自由度が必要なのでC++から離れられないので余計書くのがつらい仕様になった
Win32APIのインクルードくらいSDKにまとめとけやPinヴォケって感じ
307デフォルトの名無しさん
2020/06/14(日) 01:08:08.89ID:7AEk3bXh インタープリティアひとつつくっておけば色々な環境に使い回せるし版権問題にうるさいJavaをぶっつぶすため
308デフォルトの名無しさん
2020/06/14(日) 01:08:40.52ID:lm4ZS132309デフォルトの名無しさん
2020/06/14(日) 01:17:15.70ID:7AEk3bXh 常識だろjk
310デフォルトの名無しさん
2020/06/14(日) 01:21:41.82ID:iYtMGgBJ C++はアルゴリズムの部品化が一般的になっているので、自由に組み合わせられるところが、良いと思います。
311はちみつ餃子 ◆8X2XSCHEME
2020/06/14(日) 01:33:23.99ID:MJZpLG29 >>308
やりたければメモリのどこにでもアクセスできるってのが特に重要な違いかな。
デタラメなアクセスをしても実行時エラーとして検出されるとは限らない。
プログラマがメカニズムを理解して正しくプログラムを書けるなら (監視して実行時エラーを検出するための) 保護機構は無駄で、
余計なものがある分だけ実行速度が落ちるから無い方がいい。
それが C++ の基本思想であるゼロオーバヘッドの原則。
でも現実はそうではない。 (プログラマは間違う。)
やりたければメモリのどこにでもアクセスできるってのが特に重要な違いかな。
デタラメなアクセスをしても実行時エラーとして検出されるとは限らない。
プログラマがメカニズムを理解して正しくプログラムを書けるなら (監視して実行時エラーを検出するための) 保護機構は無駄で、
余計なものがある分だけ実行速度が落ちるから無い方がいい。
それが C++ の基本思想であるゼロオーバヘッドの原則。
でも現実はそうではない。 (プログラマは間違う。)
312デフォルトの名無しさん
2020/06/14(日) 01:35:24.50ID:lm4ZS132 C++で出来るんならいったい、C++の何が悪くてC♯が産まれたのやら
さっぱりですね、
Wikipedia見にいったらc#はBoolean型とスイッチケースでストリング型が使えるそうなので
c#にしようと思います
お邪魔しましたわ、ありがとうございました。
さっぱりですね、
Wikipedia見にいったらc#はBoolean型とスイッチケースでストリング型が使えるそうなので
c#にしようと思います
お邪魔しましたわ、ありがとうございました。
313デフォルトの名無しさん
2020/06/14(日) 01:41:28.38ID:9pT3ELpf c#を選択するのは悪くないと思うが、そこじゃないだろ
314デフォルトの名無しさん
2020/06/14(日) 01:45:14.17ID:lm4ZS132 あーうーん、自然言語処理とかネットのデータベースで
文字列比較を多用しそうな予定は未定なので・・
文字列比較を多用しそうな予定は未定なので・・
315デフォルトの名無しさん
2020/06/14(日) 02:22:12.57ID:6myF93T5316デフォルトの名無しさん
2020/06/14(日) 03:45:35.31ID:PNQfdADa 文字列処理がメインで速度求めないならpythonとかの方がいいと思うぞ
317デフォルトの名無しさん
2020/06/14(日) 03:48:19.28ID:kJWeEmyo >>312
>C++で出来るんならいったい、C++の何が悪くてC♯が産まれたのやら
>さっぱりですね、
基本的に、Cの時代からポインタが理解できない人が多かった。
ポインタが理解できて無い人でも、コピペしたりすればC++も使えたかも知れないが、
ちゃんと理解できて無いので、理解できている人に比べてメモリーの解放を間違ってしまう頻度が高い。
そのため、ポインタが出てこないVBを使う人が多かった。
VBしか使えなかった人でもが使えるようにした上で、見かけ上の文法と言語の名称をC++に似せることによって
今までC++を使えずに肩身の狭い思いをしてきた人に希望の光を与えることに成功したのがC#。
>C++で出来るんならいったい、C++の何が悪くてC♯が産まれたのやら
>さっぱりですね、
基本的に、Cの時代からポインタが理解できない人が多かった。
ポインタが理解できて無い人でも、コピペしたりすればC++も使えたかも知れないが、
ちゃんと理解できて無いので、理解できている人に比べてメモリーの解放を間違ってしまう頻度が高い。
そのため、ポインタが出てこないVBを使う人が多かった。
VBしか使えなかった人でもが使えるようにした上で、見かけ上の文法と言語の名称をC++に似せることによって
今までC++を使えずに肩身の狭い思いをしてきた人に希望の光を与えることに成功したのがC#。
318デフォルトの名無しさん
2020/06/14(日) 03:50:45.95ID:kJWeEmyo VB、VBと馬鹿にされてきた恨みつらみの反動で、C++は古いということにして、
新しいC#に適用できない老人が使う言語、という印象操作をする運動が
繰り広げられている。
新しいC#に適用できない老人が使う言語、という印象操作をする運動が
繰り広げられている。
319デフォルトの名無しさん
2020/06/14(日) 04:05:18.35ID:kJWeEmyo 彼らの脳内では、なんとかしてC#の人気を出すことによって、
C++使いを減らしていけば、もう二度とVB、VBと馬鹿にされた暗黒時代に
戻ることがなくなると予定されている。
C++使いを減らしていけば、もう二度とVB、VBと馬鹿にされた暗黒時代に
戻ることがなくなると予定されている。
320デフォルトの名無しさん
2020/06/14(日) 04:15:32.10ID:Lj4n2emQ321デフォルトの名無しさん
2020/06/14(日) 04:43:58.99ID:kJWeEmyo C#はC++は、現実にかなり遅い。
それはそれぞれを使って作成されたアプリを比較してみれば分かる。
よく分かる例としてはVSだ。C++製のVSは高速だったが、C#製のVSは劇遅。
もう一つは、FrontPageとExpressionWeb 4。
開発に使われている言語以外はほぼ同じアプリだが、C++製の前者に比べて
C#製の後者は劇遅。
それはそれぞれを使って作成されたアプリを比較してみれば分かる。
よく分かる例としてはVSだ。C++製のVSは高速だったが、C#製のVSは劇遅。
もう一つは、FrontPageとExpressionWeb 4。
開発に使われている言語以外はほぼ同じアプリだが、C++製の前者に比べて
C#製の後者は劇遅。
322デフォルトの名無しさん
2020/06/14(日) 04:59:16.97ID:VVffaeyk >>297
手間がかかりすぎると聞きますがどうなのでしょうか
手間がかかりすぎると聞きますがどうなのでしょうか
323デフォルトの名無しさん
2020/06/14(日) 05:00:21.83ID:Lj4n2emQ それは.netフレームワークとかSilverlightの違いですか?WPF?でしたか?
Win XPとVistaの違いなようなDirectX使うか使わないかというかGUI処理ありきで画面とロジックを分けたゆえのXMLパーサーの重さなのか
グラボやドライバーがネックなような・・・
Win XPとVistaの違いなようなDirectX使うか使わないかというかGUI処理ありきで画面とロジックを分けたゆえのXMLパーサーの重さなのか
グラボやドライバーがネックなような・・・
324デフォルトの名無しさん
2020/06/14(日) 05:03:18.92ID:fGEYrFA/ 俺も297と同意見
325デフォルトの名無しさん
2020/06/14(日) 05:09:24.45ID:kJWeEmyo >>322
MFCがGUI関連が弱いという問題はあるが、C++自体は、手間はそんなにかからない。
そんなに難しいわけでもない。
ちゃんとC言語のポインタ周りを勉強して理解することが大切で、
それさえ分かってしまえば、C++はCよりも開発効率がかなり高いし、安全。
メモリの解放の純粋なC言語では手間がかかったが、C++だとデストラクタが
発明されたことにより楽になり、そんなに危険度は高くない。
MFCがGUI関連が弱いという問題はあるが、C++自体は、手間はそんなにかからない。
そんなに難しいわけでもない。
ちゃんとC言語のポインタ周りを勉強して理解することが大切で、
それさえ分かってしまえば、C++はCよりも開発効率がかなり高いし、安全。
メモリの解放の純粋なC言語では手間がかかったが、C++だとデストラクタが
発明されたことにより楽になり、そんなに危険度は高くない。
326デフォルトの名無しさん
2020/06/14(日) 05:18:18.18ID:fGEYrFA/ Cでexitを安易に使う癖がついているやつには陰険な罠がデストラクタにはあるわけだが
327デフォルトの名無しさん
2020/06/14(日) 05:29:57.20ID:qmm3PCBI328デフォルトの名無しさん
2020/06/14(日) 05:35:47.32ID:qmm3PCBI >>295
Electron も良いけど、Ruby on Rails も良い
ただし、Rails でも、GUI は、HTML, CSS/SASS, JavaScript, jQuery, Bootstrap。
または、React
Electron も良いけど、Ruby on Rails も良い
ただし、Rails でも、GUI は、HTML, CSS/SASS, JavaScript, jQuery, Bootstrap。
または、React
329デフォルトの名無しさん
2020/06/14(日) 05:38:37.79ID:VVffaeyk330デフォルトの名無しさん
2020/06/14(日) 06:18:58.47ID:kJWeEmyo >>329
まず、Electronは配布ファイルのサイズが数百MBあるので、それだけでも
プログラムの品質が下がる。
Rubyは、GUIに弱い。
C#は悪く無いとする人が多いが現実の本格的なアプリの例では遅いことが多い。
まず、Electronは配布ファイルのサイズが数百MBあるので、それだけでも
プログラムの品質が下がる。
Rubyは、GUIに弱い。
C#は悪く無いとする人が多いが現実の本格的なアプリの例では遅いことが多い。
331デフォルトの名無しさん
2020/06/14(日) 06:21:59.90ID:iYtMGgBJ C#、Electron、RubyはC++よりはるかに優れているので、そっち使ったほうが良いと思います。
それらは実行時最適化のおかげでC++の10倍速いという実験結果もあります。
それらは実行時最適化のおかげでC++の10倍速いという実験結果もあります。
332デフォルトの名無しさん
2020/06/14(日) 06:23:08.37ID:kJWeEmyo >>330
C#は、GUI部品はCで書かれているWin32を使っているので、簡単な
HelloWorld程度ではC++並の速度が出ているように見える。
ところが、使うメモリの量が上がってくると急激に遅くなる特徴がある。
メモリだけでなく、GUIパーツが多くなるだけでも遅いと聞いている。
凄腕プログラマの中には、実感としてC++の10倍遅い、という人がいる位。
現にVSやExpressionWeb 4の起動速度は以上に遅いし、起動後もとても遅い。
C#は、GUI部品はCで書かれているWin32を使っているので、簡単な
HelloWorld程度ではC++並の速度が出ているように見える。
ところが、使うメモリの量が上がってくると急激に遅くなる特徴がある。
メモリだけでなく、GUIパーツが多くなるだけでも遅いと聞いている。
凄腕プログラマの中には、実感としてC++の10倍遅い、という人がいる位。
現にVSやExpressionWeb 4の起動速度は以上に遅いし、起動後もとても遅い。
333デフォルトの名無しさん
2020/06/14(日) 06:23:55.47ID:kJWeEmyo334デフォルトの名無しさん
2020/06/14(日) 06:25:03.87ID:iYtMGgBJ >>333
対立求めてる人はとっとと追い出したほうが良い。
対立求めてる人はとっとと追い出したほうが良い。
335デフォルトの名無しさん
2020/06/14(日) 06:42:43.23ID:iYtMGgBJ336デフォルトの名無しさん
2020/06/14(日) 07:29:43.89ID:kJWeEmyo >>355
>何言ってんだふふんと、真のC++使いなら思えるはず。
いや、C++は沢山の問題点を持っていることは事実である。
しかし、効率面でC#は、C++には大差で負けることも、現実のアプリの例では
垣間見えることもまた事実。
>何言ってんだふふんと、真のC++使いなら思えるはず。
いや、C++は沢山の問題点を持っていることは事実である。
しかし、効率面でC#は、C++には大差で負けることも、現実のアプリの例では
垣間見えることもまた事実。
337デフォルトの名無しさん
2020/06/14(日) 07:32:52.41ID:iYtMGgBJ じゃあいちいち他言語を下げるのはおやめなさい。
王者には王者の気品が求められるのです。
王者には王者の気品が求められるのです。
339デフォルトの名無しさん
2020/06/14(日) 07:35:16.26ID:VVffaeyk c++使うといつまでも完成しないなんて話を聞いたもんですから
340デフォルトの名無しさん
2020/06/14(日) 08:29:10.72ID:7AEk3bXh いつまでも完成しないって
バカだからだろ
バカだからだろ
341デフォルトの名無しさん
2020/06/14(日) 08:36:28.26ID:qmm3PCBI 可読性・難易度・バグりにくさ
動的言語
Ruby : 1
JavaScript : 3
静的言語
C# : 5
ポインターのある言語
C : 15
C++ : 75
動的言語
Ruby : 1
JavaScript : 3
静的言語
C# : 5
ポインターのある言語
C : 15
C++ : 75
342デフォルトの名無しさん
2020/06/14(日) 08:39:06.10ID:g+gmh/oa わかりやすい例でいうと、Windows10がどんどん重くなっているが
それは今までC++で書かれてた部分をC#で書き換え続けられているからといっても過言ではない
それは今までC++で書かれてた部分をC#で書き換え続けられているからといっても過言ではない
343デフォルトの名無しさん
2020/06/14(日) 09:06:28.85ID:MuaS91+w >C++で書かれてた部分をC#で書き換え続けられている
それは別になっとらんぞ
Windowsチームって.NET嫌ってるし
それは別になっとらんぞ
Windowsチームって.NET嫌ってるし
344デフォルトの名無しさん
2020/06/14(日) 09:14:55.23ID:VVffaeyk >>340
手間がどのくらい違うのですか?
手間がどのくらい違うのですか?
345デフォルトの名無しさん
2020/06/14(日) 09:18:34.27ID:7AEk3bXh346デフォルトの名無しさん
2020/06/14(日) 09:20:16.16ID:g+gmh/oa >>343
例えばタスクマネージャーや電卓はUWPだと思うが、これって.NETの焼き直しか再利用だと思ってるけどどうなんだろう
例えばタスクマネージャーや電卓はUWPだと思うが、これって.NETの焼き直しか再利用だと思ってるけどどうなんだろう
347デフォルトの名無しさん
2020/06/14(日) 09:32:29.33ID:MuaS91+w >>346
シェルとかも含めたXAML UIの部分のこと言ってるんだろうけど
あれはC#からも呼び出せるだけのネイティブで実装されたAPI(WinRT)だよ
今の電卓なんかはまさしくわかりやすい例で、特例でコード公開されてて全部C++(/CX)だよ
新規に打ち出そうとしてるWinUIもC++(/WinRT)での実装
UWPアプリ単体で見ればC++だったりC#だったりまちまちだろうけど
今はXAML=WPF=C#のイメージは切り離した方が良い
シェルとかも含めたXAML UIの部分のこと言ってるんだろうけど
あれはC#からも呼び出せるだけのネイティブで実装されたAPI(WinRT)だよ
今の電卓なんかはまさしくわかりやすい例で、特例でコード公開されてて全部C++(/CX)だよ
新規に打ち出そうとしてるWinUIもC++(/WinRT)での実装
UWPアプリ単体で見ればC++だったりC#だったりまちまちだろうけど
今はXAML=WPF=C#のイメージは切り離した方が良い
348デフォルトの名無しさん
2020/06/14(日) 10:00:52.61ID:g+gmh/oa349デフォルトの名無しさん
2020/06/14(日) 10:31:38.76ID:v+4IVp6H >>335
王者の風格とか気品とか、真のC++使いだとか、そのキッズが喜びそうなワードばかり並べ立てて何がしたいの?
王者の風格とか気品とか、真のC++使いだとか、そのキッズが喜びそうなワードばかり並べ立てて何がしたいの?
350デフォルトの名無しさん
2020/06/14(日) 10:36:59.36ID:UiekgbQo (精神的)キッズが喜びたがってるのだろう
351デフォルトの名無しさん
2020/06/14(日) 10:59:07.21ID:fGEYrFA/ 確かに「王者の風格」がでてきたときは0.5秒くらい「えっ?」てなった
352デフォルトの名無しさん
2020/06/14(日) 10:59:49.90ID:v+4IVp6H >>338
プログラムの実装時の労力は言語だけでなく作る対象によっても変わるからケースバイケースだけど、言語の習得の労力で言えば、C++でまともな実用的なプログラムを作れるレベルに達するのは他の言語に比べて大変だよ。
もし今現在まったくプログラミングの経験がないなら、C++よりC#から始めた方がいい。
C#で速度がでないことを心配するなら、C#で作ってどう改善しても速度が足りないとなってからC++を学習してC++に移植する方がトータルでは早くできそう。
そもそもC#では速度的に厳しいような難易度の高いプログラムを、未経験者がいきなりC++で作り始めることはかなりこんなんだと思うぞ。
プログラムの実装時の労力は言語だけでなく作る対象によっても変わるからケースバイケースだけど、言語の習得の労力で言えば、C++でまともな実用的なプログラムを作れるレベルに達するのは他の言語に比べて大変だよ。
もし今現在まったくプログラミングの経験がないなら、C++よりC#から始めた方がいい。
C#で速度がでないことを心配するなら、C#で作ってどう改善しても速度が足りないとなってからC++を学習してC++に移植する方がトータルでは早くできそう。
そもそもC#では速度的に厳しいような難易度の高いプログラムを、未経験者がいきなりC++で作り始めることはかなりこんなんだと思うぞ。
353デフォルトの名無しさん
2020/06/14(日) 11:01:19.61ID:u20vDDhC コードの王子さま「まだまだだね」
354デフォルトの名無しさん
2020/06/14(日) 12:21:48.10ID:7AEk3bXh 孤高だからな
355デフォルトの名無しさん
2020/06/14(日) 13:07:15.05ID:8/gzWF83356デフォルトの名無しさん
2020/06/14(日) 15:06:28.05ID:CHdP3JGu >>347
>今の電卓なんかはまさしくわかりやすい例で、特例でコード公開されてて全部C++(/CX)だよ
>新規に打ち出そうとしてるWinUIもC++(/WinRT)での実装
C++/CX はC++ではない。
それが遅い原因だ。
C++/CXを勝手にC++と思ってしまう人が出て本物のC++は迷惑。
>今の電卓なんかはまさしくわかりやすい例で、特例でコード公開されてて全部C++(/CX)だよ
>新規に打ち出そうとしてるWinUIもC++(/WinRT)での実装
C++/CX はC++ではない。
それが遅い原因だ。
C++/CXを勝手にC++と思ってしまう人が出て本物のC++は迷惑。
357デフォルトの名無しさん
2020/06/14(日) 15:42:22.25ID:CHdP3JGu >>341
>C : 15
>C++ : 75
もともと、C++は、C with class 程度の意味で現れて、それで人気が出た。
その時は今ほど複雑でなく、Cではメモリー解放 free() を全部完全にプログラマが
書かなければならなかったところと、C++のデストラクタを使えば、ほぼ自動化することが出来た。
これにより、C++はCよりはメモリー安全になった。
型をC以上に厳密にすることで、コンストラクタとデストラクタの呼び出される回数が、ほぼ必ず同じに
なるように設計されていた。
キャスト構文を使わず、それぞれのデストラクタの中で、子供のオブジェクトに対する delete 文を
書き忘れない限り、ほぼ、コンストラクタとデストラクタは一対一に対応するので、
結果的にメモリーの解放間違いはほぼ無くせる設計になっていた。
これが、(恐らく)後になって RAII という言葉で語られるようになっていった。
また、クラスメンバに対しprotected属性が使えることも安全性を高めた。
さらに、Cでは実行段階で関数を超高速に切り替えるためには関数ポインタを使うことが必須であったが、
C++では仮想関数でそれを行うことが出来るようになり、間違いを減らすことが可能になった。
クラスの継承の概念は、既に作ったプログラムを少しずつ変化させることに役立つため、
プログラムを美しく設計できるようになった。
C++は今のバージョンは難しく見えるが、もともとはCを安全にすることにとても役立つものであった。
>C : 15
>C++ : 75
もともと、C++は、C with class 程度の意味で現れて、それで人気が出た。
その時は今ほど複雑でなく、Cではメモリー解放 free() を全部完全にプログラマが
書かなければならなかったところと、C++のデストラクタを使えば、ほぼ自動化することが出来た。
これにより、C++はCよりはメモリー安全になった。
型をC以上に厳密にすることで、コンストラクタとデストラクタの呼び出される回数が、ほぼ必ず同じに
なるように設計されていた。
キャスト構文を使わず、それぞれのデストラクタの中で、子供のオブジェクトに対する delete 文を
書き忘れない限り、ほぼ、コンストラクタとデストラクタは一対一に対応するので、
結果的にメモリーの解放間違いはほぼ無くせる設計になっていた。
これが、(恐らく)後になって RAII という言葉で語られるようになっていった。
また、クラスメンバに対しprotected属性が使えることも安全性を高めた。
さらに、Cでは実行段階で関数を超高速に切り替えるためには関数ポインタを使うことが必須であったが、
C++では仮想関数でそれを行うことが出来るようになり、間違いを減らすことが可能になった。
クラスの継承の概念は、既に作ったプログラムを少しずつ変化させることに役立つため、
プログラムを美しく設計できるようになった。
C++は今のバージョンは難しく見えるが、もともとはCを安全にすることにとても役立つものであった。
358デフォルトの名無しさん
2020/06/14(日) 16:14:13.31ID:PqSUj3Py 「本物のC++」であるかどうかと速度は直接関係はないと思うが
360デフォルトの名無しさん
2020/06/14(日) 17:11:05.05ID:CHdP3JGu >>358
C++/CXは、メモリ関連で本物のC++とは異なったやり方をしている。
C++が速いのはまさにメモリ関連であるのだから、ソースの書き方が似ていると
しても、そこを変えた言語で書いたプログラムの速度がC++と同じであるとは
とても言えない。
C++/CXは、メモリ関連で本物のC++とは異なったやり方をしている。
C++が速いのはまさにメモリ関連であるのだから、ソースの書き方が似ていると
しても、そこを変えた言語で書いたプログラムの速度がC++と同じであるとは
とても言えない。
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 中国とロシアの爆撃機、日本周辺で共同飛行 [少考さん★]
- 「中国側も日本機のレーダーを感知していた」 中国メディアが報道 [♪♪♪★]
- 【YouTuber】バイク事故で入院のゆたぼん、振込で「お見舞金」募る [muffin★]
- 高市早苗首相、消費税減税に後ろ向き 足かせはレジシステム? 「責任ある積極財政」期待高いが [蚤の市★]
- 堀江貴文、キャッシュレス非対応の店にモヤッ 『PayPay』立ち上げの人物にまさかの直談判「現金決済しかできないんだけど…」 [冬月記者★]
- バリ島で男子生徒ら集団万引きか、防犯カメラ映像が拡散 京都の大谷中学・高校が「窃盗行為」謝罪★7 [七波羅探題★]
- 防衛省、中国を完全論破www 「事前通告があったのは海自であって空自ではない」 高市早苗勝利 [175344491]
- 買ったばかりのオーブンレンジ「この機種はお餅を焼くことはできません」
- 富裕層向けの風俗リゾート作りたい
- 【悲報】JA「全然米が売れなくて倉庫を圧迫してる。助けて!」米卸売り業者「安売りしたら赤字になる…助けて!」 [802034645]
- 【悲惨】中国軍が自衛隊に「事前通告」し自衛隊も返答した音声が公開されてしまうwwwこれは高市チェックアウトゕ★4 [597533159]
- 気が狂いそう
