エスケープシーケンスやWin32APIなどの環境依存なものもOK
そのような質問は必ず環境を書きましょう
半角空白やタブでのインデントはスレに貼ると無くなります
コードを貼れる所
http://codepad.org/
https://ideone.com/
前スレ
【初心者歓迎】C/C++室 Ver.101【環境依存OK】
https://mevius.5ch.net/test/read.cgi/tech/1500329247/
探検
【初心者歓迎】C/C++室 Ver.102【環境依存OK】
レス数が900を超えています。1000を超えると表示できなくなるよ。
1デフォルトの名無しさん
2017/11/04(土) 16:33:35.07ID:NYxCuvMY831デフォルトの名無しさん
2018/06/06(水) 20:34:19.38ID:sZLPzbQ0 もしかして、std::unique_ptrを突っ込むのがすでに間違いで、std::anyを使えってことなんだろうか。
832デフォルトの名無しさん
2018/06/06(水) 21:03:14.93ID:9YbuVUhL >>827
std::forward_listとそのイテレータだけでFIFOのQueueを実装できたりするよ
イテレータを介したinsert_after()になるから要素を入れるコストはイテレータのコピー分、std::queueよりも高くなると思うけど
std::queueはstd::dequeかstd::listを利用するから、std::forward_listで実装した方がメモリ使用量は少ない
単方向リストを使用して独自実装した方が低コストに抑えられると思うけどね
まあ、再利用も良し悪しって事だね
std::forward_listとそのイテレータだけでFIFOのQueueを実装できたりするよ
イテレータを介したinsert_after()になるから要素を入れるコストはイテレータのコピー分、std::queueよりも高くなると思うけど
std::queueはstd::dequeかstd::listを利用するから、std::forward_listで実装した方がメモリ使用量は少ない
単方向リストを使用して独自実装した方が低コストに抑えられると思うけどね
まあ、再利用も良し悪しって事だね
833デフォルトの名無しさん
2018/06/06(水) 21:09:23.87ID:9YbuVUhL >>830
ごめん書き方が悪かった、1つの要素の挿入にO(1)って意味ね
Linked Listは、挿入場所への移動にO(n)かかり、挿入にO(1)かかるから
最後の要素を指し示すイテレータを保持してたらpush_back()みたいなことも出来るよって話ね
ごめん書き方が悪かった、1つの要素の挿入にO(1)って意味ね
Linked Listは、挿入場所への移動にO(n)かかり、挿入にO(1)かかるから
最後の要素を指し示すイテレータを保持してたらpush_back()みたいなことも出来るよって話ね
834デフォルトの名無しさん
2018/06/09(土) 00:34:24.48ID:l0w/1aK3 std::array の empty()メソッドって意味があるのか?と最近思ったので質問させてください
arrayは通常 array<int, 固定値>のように宣言してから使うと思うのですが、
empty()メソッドの戻り値は <int, 0> 以外は全てfalseでした。
つまり通常<int,(0より大きい整数)>で宣言して使う場合empty()はfalseしか返ってこない
気がするのですが、このメソッドは意味があるのでしょうか?
arrayは通常 array<int, 固定値>のように宣言してから使うと思うのですが、
empty()メソッドの戻り値は <int, 0> 以外は全てfalseでした。
つまり通常<int,(0より大きい整数)>で宣言して使う場合empty()はfalseしか返ってこない
気がするのですが、このメソッドは意味があるのでしょうか?
835デフォルトの名無しさん
2018/06/09(土) 05:56:11.66ID:nuHHgQUg >>834
テンプレートを使って異なる種類のコンテナに共通に使える処理を書くときに、他のコンテナ達と共通の関数を備えていると都合がいいからかなと思う。
テンプレートを使って異なる種類のコンテナに共通に使える処理を書くときに、他のコンテナ達と共通の関数を備えていると都合がいいからかなと思う。
836デフォルトの名無しさん
2018/06/09(土) 12:31:35.52ID:pc7gEgF8 >>834
そのメンバの存在意味の有無に関わらず、コンテナ要件の1つだからね
他のオブジェクト指向言語でのインターフェイスや抽象クラスを用意していないだけで
コンテナとして共通の要件(インターフェイス)が設けられている
例えば、size()、empty()、begin()、end()など
本来、動的なポリモーフィズムをするためにインターフェイスや抽象クラスを設けるけど
vtableは高コストだから、ゼロオーバーヘッドの原則に則り使用していないのよ
まあ、コンテナ自体STLの1つだからオブジェクト指向的な機能は意識していなかったと思うけどね
余談だが、聞いた所によるとテンプレートって最初マクロで実現しようとしてたらしいね
そのメンバの存在意味の有無に関わらず、コンテナ要件の1つだからね
他のオブジェクト指向言語でのインターフェイスや抽象クラスを用意していないだけで
コンテナとして共通の要件(インターフェイス)が設けられている
例えば、size()、empty()、begin()、end()など
本来、動的なポリモーフィズムをするためにインターフェイスや抽象クラスを設けるけど
vtableは高コストだから、ゼロオーバーヘッドの原則に則り使用していないのよ
まあ、コンテナ自体STLの1つだからオブジェクト指向的な機能は意識していなかったと思うけどね
余談だが、聞いた所によるとテンプレートって最初マクロで実現しようとしてたらしいね
837はちみつ餃子 ◆8X2XSCHEME
2018/06/09(土) 12:50:19.63ID:EdmRUNh7 具体的にコンテナに求められる要求はここでまとめられているので参考になれば。
http://ja.cppreference.com/w/cpp/concept/Container
クラスに求める要求を表現するための機能「コンセプト」は C++ の悲願としてずっと前から温められているのだけれど、
なかなか仕様に入らずに先送りされてるという状況。
http://ja.cppreference.com/w/cpp/concept/Container
クラスに求める要求を表現するための機能「コンセプト」は C++ の悲願としてずっと前から温められているのだけれど、
なかなか仕様に入らずに先送りされてるという状況。
838デフォルトの名無しさん
2018/06/11(月) 16:42:05.03ID:SE5SjeC/ ファイルから読み込んだバイト列の先頭部分を参照して、
それがJPEGファイルなのか、PNGファイルなのか、などを判定したいのですが、
どの程度の判定をすればよいものなのでしょうか。
例えばJPEGファイルなら、先頭3バイトを{0xFF, 0xD8, 0xFF}とmemcmp()で十分なのでしょうか。
それがJPEGファイルなのか、PNGファイルなのか、などを判定したいのですが、
どの程度の判定をすればよいものなのでしょうか。
例えばJPEGファイルなら、先頭3バイトを{0xFF, 0xD8, 0xFF}とmemcmp()で十分なのでしょうか。
839デフォルトの名無しさん
2018/06/11(月) 16:50:15.52ID:9mmiVsnm 十分かどうかは時と場合による
840放置された蟻人間 ◆T6xkBnTXz7B0
2018/06/11(月) 16:51:12.74ID:7op9QnGW 画像ファイルには、過去にいくつか脆弱性が確認されている。使用において、脆弱性の存在が致命的ならば、きちんとチェックすべきだし、
処理スピードを優先するなら、memcmpで十分。
処理スピードを優先するなら、memcmpで十分。
841デフォルトの名無しさん
2018/06/11(月) 17:03:57.96ID:SE5SjeC/ すいません、十分というのは、ファイルの破損や脆弱性関連は置いておいて、
他の形式の正常なファイルも拾ってしまわないかということです。
JPEGの場合、先頭の3バイトを判定すれば、他の正常なファイルが引っかかることはないのでしょうか。
他の形式の正常なファイルも拾ってしまわないかということです。
JPEGの場合、先頭の3バイトを判定すれば、他の正常なファイルが引っかかることはないのでしょうか。
842デフォルトの名無しさん
2018/06/11(月) 17:06:17.81ID:3AghcpDH 中身見ないなら、拡張子でもできそうだが
843デフォルトの名無しさん
2018/06/11(月) 17:12:32.50ID:oqoWhxjw 3バイトをランダムなデータと比較する場合、1/16777216の確率で誤認する
ファイルを最後までパースして、JPEGデータとして読み込めるかどうかチェックするのが確実だが
ファイルを最後までパースして、JPEGデータとして読み込めるかどうかチェックするのが確実だが
844はちみつ餃子 ◆8X2XSCHEME
2018/06/11(月) 17:40:03.88ID:CXPnR3I1 >>841
POSIX には file コマンドがあってファイルの種類を判定できるけど、その実装はヒューリスティックだよ。
参考になるとは思うから読んでみるのもいいんじゃない?
ライセンス的に OK ならそのまま流用してもいいかも。
どの程度の精度で判定すべきかは状況によるので総合的に考えてとしか言えない。
例えば、 jpg ではないファイルが多数ある中から jpg を探すというような状況だったら、
先頭をちょっとだけ読んで jpg っぽかったら全部を読んで詳細に判定するというのでもいい。
ほとんどが jpg なのだったら、いちいち詳細に判定するのは速度的に遅くなるけど、それが許容できるのか、
許容できないのであればどの程度まで緩い判定にしていいのか、バランスの問題。
POSIX には file コマンドがあってファイルの種類を判定できるけど、その実装はヒューリスティックだよ。
参考になるとは思うから読んでみるのもいいんじゃない?
ライセンス的に OK ならそのまま流用してもいいかも。
どの程度の精度で判定すべきかは状況によるので総合的に考えてとしか言えない。
例えば、 jpg ではないファイルが多数ある中から jpg を探すというような状況だったら、
先頭をちょっとだけ読んで jpg っぽかったら全部を読んで詳細に判定するというのでもいい。
ほとんどが jpg なのだったら、いちいち詳細に判定するのは速度的に遅くなるけど、それが許容できるのか、
許容できないのであればどの程度まで緩い判定にしていいのか、バランスの問題。
845デフォルトの名無しさん
2018/06/12(火) 12:54:07.45ID:xDeIiE2o なぜ多数から探すかどうかで判定方法が変わるのか
847デフォルトの名無しさん
2018/06/12(火) 13:15:57.78ID:BvPEMwcC 明らかに一致しない時は瞬時に判断出来る
ヘッダですぐにわかるので
jpgではあるんだけど
非対応フォーマットとか一部化けてて表示出来ないとか
そういう判断が難しい
ヘッダですぐにわかるので
jpgではあるんだけど
非対応フォーマットとか一部化けてて表示出来ないとか
そういう判断が難しい
848デフォルトの名無しさん
2018/06/12(火) 13:34:24.68ID:BvPEMwcC はちみつはJPGを扱ったことが無いってのがよく分かる
849はちみつ餃子 ◆8X2XSCHEME
2018/06/12(火) 14:45:14.29ID:U9ShKAeR >>847
えっ? だからまずは先頭をちょっとだけ読んでみる (この判定だと false positive はあっても false negative はない) という話なんだけど。
えっ? だからまずは先頭をちょっとだけ読んでみる (この判定だと false positive はあっても false negative はない) という話なんだけど。
850デフォルトの名無しさん
2018/06/12(火) 16:23:32.57ID:LTqXdgcV 元の >>838 の質問に戻れば「どんなファイル群を扱うのかによる」としか
言いようがないんじゃないか?
極端な話、行儀の良いファイルだけなら拡張子で判定しても大丈夫。
(拡張子が間違ってるけど)一般的なファイルばかりなら先頭の何バイトかで判定。
悪意を持って偽装ヘッダや追加情報エリアまで利用してる可能性を気にすれば
JPEGの規格に準拠してるファイルでさえ危険、というレベルまであるかも。
言いようがないんじゃないか?
極端な話、行儀の良いファイルだけなら拡張子で判定しても大丈夫。
(拡張子が間違ってるけど)一般的なファイルばかりなら先頭の何バイトかで判定。
悪意を持って偽装ヘッダや追加情報エリアまで利用してる可能性を気にすれば
JPEGの規格に準拠してるファイルでさえ危険、というレベルまであるかも。
851はちみつ餃子 ◆8X2XSCHEME
2018/06/12(火) 16:44:07.95ID:U9ShKAeR ある程度は信じて割り切るしかしょうがない。
852デフォルトの名無しさん
2018/06/12(火) 17:43:08.97ID:RH6dhGDk JFIF以下のJPEG出す機材って監視カメラ以外見たことないなぁ
実運用上はJFIFとEXIF以外は対象外でも良いのかも
実運用上はJFIFとEXIF以外は対象外でも良いのかも
853デフォルトの名無しさん
2018/06/12(火) 17:56:59.93 ポインタでないなら、継承した関数を呼び出すときに、仮想テーブル参照による動的オーバーヘッドはないのですよね?
854はちみつ餃子 ◆8X2XSCHEME
2018/06/12(火) 18:20:08.25ID:U9ShKAeR >>853
Yes
それが仮想関数であろうとも、
オブジェクトへのアクセスがポインタ経由でないならば
どの関数を呼び出すのかコンパイル時に確定可能なので、
仮想関数テーブルにアクセスする必要はない。
(はずだと思うが言語仕様での保証はないだろうし、
実態がどうなってるか確かめたことはないんで、
誰かやってみてくれんかな。)
Yes
それが仮想関数であろうとも、
オブジェクトへのアクセスがポインタ経由でないならば
どの関数を呼び出すのかコンパイル時に確定可能なので、
仮想関数テーブルにアクセスする必要はない。
(はずだと思うが言語仕様での保証はないだろうし、
実態がどうなってるか確かめたことはないんで、
誰かやってみてくれんかな。)
855デフォルトの名無しさん
2018/06/12(火) 18:35:01.32ID:Q/HiJGFf >>849
ファイル判別の一般論じゃなくてjpgの判別ですよ
jpgの判別方法を語ればいいんです
文字コードと違ってあやしいとかはなくて
APPnの中数バイト見れば簡単にわかるんですよ
文字でJFIFとかExifとか書いてあるわけなんで
偽装が無いならこれで十分
あとは
対応フォーマットであるのか
正しいフォーマットであるのか
実際にデコード出来るのかどうか
などを判別する必要があるかどうかでその先が決まる
ファイル判別の一般論じゃなくてjpgの判別ですよ
jpgの判別方法を語ればいいんです
文字コードと違ってあやしいとかはなくて
APPnの中数バイト見れば簡単にわかるんですよ
文字でJFIFとかExifとか書いてあるわけなんで
偽装が無いならこれで十分
あとは
対応フォーマットであるのか
正しいフォーマットであるのか
実際にデコード出来るのかどうか
などを判別する必要があるかどうかでその先が決まる
856デフォルトの名無しさん
2018/06/12(火) 18:43:20.13ID:RH6dhGDk >>855
baka?
baka?
857デフォルトの名無しさん
2018/06/12(火) 18:57:45.80 >>854
ありがとうございます
ありがとうございます
858はちみつ餃子 ◆8X2XSCHEME
2018/06/12(火) 20:19:36.50ID:U9ShKAeR859デフォルトの名無しさん
2018/06/13(水) 00:32:03.88ID:21BMiWPP >>841を読んでの発言?
日本語が読めないの?
日本語が読めないの?
860はちみつ餃子 ◆8X2XSCHEME
2018/06/13(水) 01:55:04.01ID:3eXA0K0W >>859
なるほど、偽装に騙されるのは脆弱性の内 (で、それはないという前提が提示された) という解釈?
判定を誤りうる (データを作れる) のとセキュリティ的な欠陥をなんとなく区別してたけど、
質問者の感じからすると、確かに偽装で騙されるのは脆弱性の内かな。
なるほど、偽装に騙されるのは脆弱性の内 (で、それはないという前提が提示された) という解釈?
判定を誤りうる (データを作れる) のとセキュリティ的な欠陥をなんとなく区別してたけど、
質問者の感じからすると、確かに偽装で騙されるのは脆弱性の内かな。
861デフォルトの名無しさん
2018/06/13(水) 01:56:34.26ID:l7UBIPff >>855
JPEGの規格書を読んだ事が無いだろう
JPEGの規格書を読んだ事が無いだろう
862デフォルトの名無しさん
2018/06/13(水) 07:50:57.05ID:vaxyQxvX 昔ゲーム機のハックで偽装した画像ファイルを読み込ませるってのがあったような気がする。
863デフォルトの名無しさん
2018/06/13(水) 08:14:06.81ID:7lldK1Da864デフォルトの名無しさん
2018/06/13(水) 09:42:34.58ID:V88S+L9t ゲロトラップとして普通に出回ってないかね?
865デフォルトの名無しさん
2018/06/13(水) 09:46:09.42ID:Lf/dU7gs テンポラリオブジェクトについて質問です。
ロベールの本ですが、
「
Hoge Two() {
Hoge n(2);
return n;
}
int main() {
Hoge hoge(1);
hoge = Two();
とした場合、基本的には n のコピーがいったん作られて、それが hoge に
代入される形になります。このコピーこそが、テンポラリオブジェクトになる
わけです。
」
と書かれていますが、なぜわざわざ n のコピーを作るのでしょうか?
n は Two() 関数を抜けたら消えてしまいますが、これを消さずに、
返した方が効率的な気がします。
ロベールの本ですが、
「
Hoge Two() {
Hoge n(2);
return n;
}
int main() {
Hoge hoge(1);
hoge = Two();
とした場合、基本的には n のコピーがいったん作られて、それが hoge に
代入される形になります。このコピーこそが、テンポラリオブジェクトになる
わけです。
」
と書かれていますが、なぜわざわざ n のコピーを作るのでしょうか?
n は Two() 関数を抜けたら消えてしまいますが、これを消さずに、
返した方が効率的な気がします。
866デフォルトの名無しさん
2018/06/13(水) 10:17:19.41ID:Lf/dU7gs ・テンポラリオブジェクト = n のコピー
・代入により、 hoge に テンポラリオブジェクトがコピーされる。
これはなんか非常に無駄なことをやっているように思ってしまいます。
hoge に 捨てずにとっておいた n を参照させれば十分のように思います。
・代入により、 hoge に テンポラリオブジェクトがコピーされる。
これはなんか非常に無駄なことをやっているように思ってしまいます。
hoge に 捨てずにとっておいた n を参照させれば十分のように思います。
867838
2018/06/13(水) 10:17:36.81ID:818/kKId みなさんありがとうございます。
話が難しい方向に進んでしまってすいません。
勉強させていただきます。
元々の疑問は>>863の言われるとおりで、
他の形式の画像をJPEGだと誤判定してしまわないか、
さらに言うと、先頭が{0xFF, 0xD8, 0xFF}以外のJPEGファイルも存在していて、
JPEGファイルを見逃してしまうことがあるのか、ということでした。
話が難しい方向に進んでしまってすいません。
勉強させていただきます。
元々の疑問は>>863の言われるとおりで、
他の形式の画像をJPEGだと誤判定してしまわないか、
さらに言うと、先頭が{0xFF, 0xD8, 0xFF}以外のJPEGファイルも存在していて、
JPEGファイルを見逃してしまうことがあるのか、ということでした。
868デフォルトの名無しさん
2018/06/13(水) 14:58:14.75ID:54SDWBzN >>865-866
そういう時こそ右辺値参照ですよ
hoge = std::move(Two());
でもこんな事をしなくても大抵戻り値最適化(RVOやNRVO)でコピーコンストラクタは呼び出されない
明示的にムーブコンストラクタを無効にするとコンパイルエラーが発生するはず
Hoge(Hoge&&) = delete;
そういう時こそ右辺値参照ですよ
hoge = std::move(Two());
でもこんな事をしなくても大抵戻り値最適化(RVOやNRVO)でコピーコンストラクタは呼び出されない
明示的にムーブコンストラクタを無効にするとコンパイルエラーが発生するはず
Hoge(Hoge&&) = delete;
869デフォルトの名無しさん
2018/06/13(水) 14:59:33.86ID:54SDWBzN そしてこの場合代入演算子をオーバーロードしてやるとそちらが使われる
Hoge& operator=(const Hoge& hoge) {
std::cout << "assign operator called." << std::endl;
return *this;
}
Hoge& operator=(const Hoge& hoge) {
std::cout << "assign operator called." << std::endl;
return *this;
}
870デフォルトの名無しさん
2018/06/13(水) 20:08:20.11ID:VLQaO2hj (最適化をおいとくと)値渡し/値返しってそういうもんじゃん
Two()内の変数nは自動変数だからスタックに作られる
とっとけないじゃん
Two()内の変数nは自動変数だからスタックに作られる
とっとけないじゃん
871デフォルトの名無しさん
2018/06/13(水) 21:00:21.79ID:qH/FTczC まあ2回コピーされるのを1回に抑えるための最適化でしょう
872デフォルトの名無しさん
2018/06/13(水) 21:08:53.19ID:buJbRccy 確実なのは戻り値じゃなくて参照、もしくはポインタにすること
873デフォルトの名無しさん
2018/06/13(水) 21:40:28.10ID:GheUJm4W >>872
それヤバくね?関数を抜けた途端消える存在を参照するとか
それヤバくね?関数を抜けた途端消える存在を参照するとか
874デフォルトの名無しさん
2018/06/13(水) 22:09:20.49ID:1EWuco5t 呼び出し元から参照を渡してそこに返してもらえってことじゃなくて?
875デフォルトの名無しさん
2018/06/13(水) 22:13:11.63ID:21BMiWPP もちろんそう
昔ながらの方法
昔ながらの方法
876デフォルトの名無しさん
2018/06/13(水) 23:23:40.79ID:MDGDBDRC -Wreturn-local-addr みたいなwarningじゃなくて規格でエラーにすれば873みたいな勘違いは無くなるのにな
877デフォルトの名無しさん
2018/06/14(木) 10:53:47.52ID:BKSAN5oR 普段c#使っているのですが、c++/cliでデータベース絡みのdllを作ってて、わからないことがあります。
SqlConnectionやDataSetのDispose()がインテリセンスでは候補に上がるのに、コンパイルで「メンバーではありません」とエラーになります。
スコープを抜けると破棄されるので何もしなくてよいという認識でよいのでしょうか?
また、この理屈で、c#の勝手に破棄してくれるusing相当の機能はない、と言うか、必要ないのでしょうか?
SqlConnectionやDataSetのDispose()がインテリセンスでは候補に上がるのに、コンパイルで「メンバーではありません」とエラーになります。
スコープを抜けると破棄されるので何もしなくてよいという認識でよいのでしょうか?
また、この理屈で、c#の勝手に破棄してくれるusing相当の機能はない、と言うか、必要ないのでしょうか?
878デフォルトの名無しさん
2018/06/14(木) 14:30:10.48ID:Lgo9GPo1 >>877
IDisposable使ってる?
スコープ抜けてもGCによって回収されるタイミングは保証できない
どうしてもすぐにGCしたいなら
GC.Collect();
をする。
多分ジェネレーション0だろうから
GC.Collect(0);
でいいのでは
IDisposable使ってる?
スコープ抜けてもGCによって回収されるタイミングは保証できない
どうしてもすぐにGCしたいなら
GC.Collect();
をする。
多分ジェネレーション0だろうから
GC.Collect(0);
でいいのでは
879デフォルトの名無しさん
2018/06/14(木) 15:24:59.55ID:BKSAN5oR >>878
レスをござます。
作ってるクラスがIDisposableを継承しないとダメってことですか?
作ってるのはインスタンス作らなくてもいいstaticクラスなんですけど。
GCは効果の程を確認できないですが、やってみます。
レスをござます。
作ってるクラスがIDisposableを継承しないとダメってことですか?
作ってるのはインスタンス作らなくてもいいstaticクラスなんですけど。
GCは効果の程を確認できないですが、やってみます。
880デフォルトの名無しさん
2018/06/14(木) 15:25:54.47ID:BKSAN5oR >>879
レスありがとうございます。です。
レスありがとうございます。です。
881デフォルトの名無しさん
2018/06/14(木) 16:42:09.02ID:79UoYXtL >>879
https://qiita.com/haniwo820/items/ba0ab725c25673c20338
こんなのとか
staticクラスだとファイナライザーを書けないから内部で他のクラスをnewした場合が問題
それとメンバ変数もstaticでなければならない
となると普通はアプリケーションが破棄されるまで残る
IDisposableをstaticクラスが継承するとエラーになる
というかstaticクラスはインターフェイスを継承できない
むしろusingを使えない理由が分からない
http://ufcpp.net/study/csharp/oo_dispose.html
こういうのだとstaticクラス風にファイナライザーを走らせられる
それかStreamみたいのでClose()したいのならClose()メソッドを書けばいい
SqlConnectionやDataSetはいちいちClose()する必要があるのかな?
https://qiita.com/haniwo820/items/ba0ab725c25673c20338
こんなのとか
staticクラスだとファイナライザーを書けないから内部で他のクラスをnewした場合が問題
それとメンバ変数もstaticでなければならない
となると普通はアプリケーションが破棄されるまで残る
IDisposableをstaticクラスが継承するとエラーになる
というかstaticクラスはインターフェイスを継承できない
むしろusingを使えない理由が分からない
http://ufcpp.net/study/csharp/oo_dispose.html
こういうのだとstaticクラス風にファイナライザーを走らせられる
それかStreamみたいのでClose()したいのならClose()メソッドを書けばいい
SqlConnectionやDataSetはいちいちClose()する必要があるのかな?
882デフォルトの名無しさん
2018/06/14(木) 22:51:20.07ID:khTKmU6v883デフォルトの名無しさん
2018/06/15(金) 09:10:59.15ID:8YDR1CpT >>879 です。
VS2013 c++のCLRコンソールアプリを新規作成したやつです。
include "stdafx.h"
using namespace System;
using namespace System::Data;
using namespace System::Data::SqlClient;
int main(array<System::String ^> ^args)
{
Console::WriteLine(L"Hello World");
String ^constr = "xxxxx";
SqlConnection ^connection = gcnew SqlConnection(constr);
connection->Open();
connection->Close();
connection->Dispose();
return 0;
}
この Disposeでエラーになります。
ここには書いてませんがDataSetも
Disposeでエラーになります。
上記コードの場合 Dispose抜きで問題ないのでしょうか?
>>882
まさにこれを読みました。c#のusingがc++にはない認識です。
この理由がこの通りならDisposeなしで心配ないのですが。
VS2013 c++のCLRコンソールアプリを新規作成したやつです。
include "stdafx.h"
using namespace System;
using namespace System::Data;
using namespace System::Data::SqlClient;
int main(array<System::String ^> ^args)
{
Console::WriteLine(L"Hello World");
String ^constr = "xxxxx";
SqlConnection ^connection = gcnew SqlConnection(constr);
connection->Open();
connection->Close();
connection->Dispose();
return 0;
}
この Disposeでエラーになります。
ここには書いてませんがDataSetも
Disposeでエラーになります。
上記コードの場合 Dispose抜きで問題ないのでしょうか?
>>882
まさにこれを読みました。c#のusingがc++にはない認識です。
この理由がこの通りならDisposeなしで心配ないのですが。
884デフォルトの名無しさん
2018/06/15(金) 10:38:59.49ID:uIGrLsPa 共同ツール 1
https://seleck.cc/685
https://trello.com/
ボードのメニュー → Power-Upsから拡張可能 Slack DropBoxなど
Trello Chrome拡張機能 elegant
ttp://www.kikakulabo.com/service-eft/
trelloのオープンソースあり
共同ツール 2
https://www.google.com/intl/ja_jp/sheets/about/
共同ツール 3
https://slack.com/intl/ja-jp
https://www.dropbox.com/ja/
https://bitbucket.org/
https://ja.atlassian.com/software/sourcetree
https://www.sketchapp.com/
ttp://photoshopvip.net/103903
ttps://goodpatch.com/blog/sketch-plugins/
Trello Chrome拡張機能プラグイン集
https://chrome.google.com/webstore/search/trello?_category=extensions
Slackプラグイン集
https://slack.com/apps
Sketchプラグイン集
https://sketchapp.com/extensions/plugins/
https://supernova.studio/
https://seleck.cc/685
https://trello.com/
ボードのメニュー → Power-Upsから拡張可能 Slack DropBoxなど
Trello Chrome拡張機能 elegant
ttp://www.kikakulabo.com/service-eft/
trelloのオープンソースあり
共同ツール 2
https://www.google.com/intl/ja_jp/sheets/about/
共同ツール 3
https://slack.com/intl/ja-jp
https://www.dropbox.com/ja/
https://bitbucket.org/
https://ja.atlassian.com/software/sourcetree
https://www.sketchapp.com/
ttp://photoshopvip.net/103903
ttps://goodpatch.com/blog/sketch-plugins/
Trello Chrome拡張機能プラグイン集
https://chrome.google.com/webstore/search/trello?_category=extensions
Slackプラグイン集
https://slack.com/apps
Sketchプラグイン集
https://sketchapp.com/extensions/plugins/
https://supernova.studio/
885デフォルトの名無しさん
2018/06/15(金) 19:01:40.09ID:J8URhrRM >>882によると、自動でDisposeさせたい場合は以下のようにする、
と書いてあるように見える。(手元に環境がないので未確認)
SqlConnection connection(constr);
connection.Open();
connection.Close();
と書いてあるように見える。(手元に環境がないので未確認)
SqlConnection connection(constr);
connection.Open();
connection.Close();
886デフォルトの名無しさん
2018/06/16(土) 06:42:53.11ID:PCTFj+qN >>883
そのコードでconnection->Dispose();を消すだけだとDisposeは呼ばれない。
C++/CLIでDisposeを呼びたい場合「delete connection;」と書く。
C#のusing相当のことをしたい場合は>>885
詳細は↓を参照。
https://loafer.jp/mixi/diary/class.xsp?2007-09-07-23-55
そのコードでconnection->Dispose();を消すだけだとDisposeは呼ばれない。
C++/CLIでDisposeを呼びたい場合「delete connection;」と書く。
C#のusing相当のことをしたい場合は>>885
詳細は↓を参照。
https://loafer.jp/mixi/diary/class.xsp?2007-09-07-23-55
887デフォルトの名無しさん
2018/06/18(月) 12:02:02.44ID:P1toAgew Dispose の件で質問してた者です。
自作のIDisposableを継承したクラスを作って確認したところ delete で Disposeが通る事を確認できました。
不慣れで詰まらない質問してしまってすみませんでした。
自作のIDisposableを継承したクラスを作って確認したところ delete で Disposeが通る事を確認できました。
不慣れで詰まらない質問してしまってすみませんでした。
888865
2018/06/20(水) 12:43:56.50ID:XX+H87IB みなさん、いろいろありがとうございました。
参考にさせていただきます。
ところで、
Cとアセンブリ言語で学ぶ計算機プログラミングの基礎概念 - プログラムはプロセッサ上でどのように実行されるのか
角川 裕次
https://www.amazon.co.jp/dp/4627848315/
この本を読んだ人はいますか?
かなり自分にとって理想的な本のようですので、買ってみようと思います。
こういう本を読めば、少しは言語の設計者の気持ちが分かるようになるのではないかと期待します。
参考にさせていただきます。
ところで、
Cとアセンブリ言語で学ぶ計算機プログラミングの基礎概念 - プログラムはプロセッサ上でどのように実行されるのか
角川 裕次
https://www.amazon.co.jp/dp/4627848315/
この本を読んだ人はいますか?
かなり自分にとって理想的な本のようですので、買ってみようと思います。
こういう本を読めば、少しは言語の設計者の気持ちが分かるようになるのではないかと期待します。
889デフォルトの名無しさん
2018/06/22(金) 23:22:38.51ID:pTq2TJuj あちらこちらでC++はひどい言語だって叩かれてるけどその割に広く使われている
つまりこれはC++を頑張って覚えればその分見返りも大きいということではなかろうか。なにしろ人の嫌がること高いスキルが必要なことはそれだけ報酬も高いはずで
つまりこれはC++を頑張って覚えればその分見返りも大きいということではなかろうか。なにしろ人の嫌がること高いスキルが必要なことはそれだけ報酬も高いはずで
C++ はひどい言語だ。これは、多くの平均以下のプログラマーが使ってるために
さらに輪をかけてゲロゲロになっていて、どうしようもないゴミが
簡単に生産されるようになってる。正直いって、C を選ぶ理由が C++ プログラマーを
追っぱらうため *だけ* だったとしても、それ自体、C を使う強力な理由になりうる。
C++ はトンでもなく悪い設計の元になりうる。どうせこの言語ではいつも STL やら
Boost やら、その他ゲロゲロベロベロの「素敵な」ライブラリの機能を使って、
それがあんたのプログラムに「役立つ」んだろうが、以下のことが起きる:
- うまく動かないときにもたらされる際限のない苦痛 (あと STL とか、特に Boost が
安定してるとか移植性があるとかいう奴は、どいつもこいつも大ウソつきで、
もはや笑えるレベルを超えている)
- 非効率な抽象プログラミングモデルで、2年たった後にこれらが実はそんなに
効率的じゃなかったことに気づくケース。でもそのときにはすでに全部の
コードがその素晴らしいオブジェクトモデルに依存していて、直すためには
アプリ全体を書き直さなきゃなんない。
言いかえれば、唯一まともで、効率がよくて、システムレベルで使えて、移植性がある
C++ ってのは、基本的に C で使える機能だけに限ったときなんだ。そして C だけに
限定するってことは、他の人がそれをめちゃくちゃにしないってことで、
ついでに沢山のプログラマが実際に低水準の問題を理解することができて、アホらしい
「オブジェクト・モデル」のたわごとを持ちこまないってことだ。
さらに輪をかけてゲロゲロになっていて、どうしようもないゴミが
簡単に生産されるようになってる。正直いって、C を選ぶ理由が C++ プログラマーを
追っぱらうため *だけ* だったとしても、それ自体、C を使う強力な理由になりうる。
C++ はトンでもなく悪い設計の元になりうる。どうせこの言語ではいつも STL やら
Boost やら、その他ゲロゲロベロベロの「素敵な」ライブラリの機能を使って、
それがあんたのプログラムに「役立つ」んだろうが、以下のことが起きる:
- うまく動かないときにもたらされる際限のない苦痛 (あと STL とか、特に Boost が
安定してるとか移植性があるとかいう奴は、どいつもこいつも大ウソつきで、
もはや笑えるレベルを超えている)
- 非効率な抽象プログラミングモデルで、2年たった後にこれらが実はそんなに
効率的じゃなかったことに気づくケース。でもそのときにはすでに全部の
コードがその素晴らしいオブジェクトモデルに依存していて、直すためには
アプリ全体を書き直さなきゃなんない。
言いかえれば、唯一まともで、効率がよくて、システムレベルで使えて、移植性がある
C++ ってのは、基本的に C で使える機能だけに限ったときなんだ。そして C だけに
限定するってことは、他の人がそれをめちゃくちゃにしないってことで、
ついでに沢山のプログラマが実際に低水準の問題を理解することができて、アホらしい
「オブジェクト・モデル」のたわごとを持ちこまないってことだ。
891デフォルトの名無しさん
2018/06/23(土) 10:31:52.34ID:UiVIxiJp 抽象化とコード(バイナリ)の質は相反するものだから
892デフォルトの名無しさん
2018/06/23(土) 11:45:24.39ID:NcXYPjUn alignas(32)とかalignas(64)とかつけなくても大体アライメント揃ってる気がするんですけどつけた方がいいんですか?
893デフォルトの名無しさん
2018/06/23(土) 12:58:59.14ID:g5s8p4AT リーナスのそれがいっちばん有名なC++批判よね
>>893
linus は昔から C++ を批判していたが、git 開発に関する 2009 年のこれが、最も効果的な批判になっていますね
これを読むと C++er は一瞬自分がわからなくなりゲシュタルト崩壊に陥りますね、もう c++11 over を追いかける気力も失せてしまいました…
linus は昔から C++ を批判していたが、git 開発に関する 2009 年のこれが、最も効果的な批判になっていますね
これを読むと C++er は一瞬自分がわからなくなりゲシュタルト崩壊に陥りますね、もう c++11 over を追いかける気力も失せてしまいました…
895デフォルトの名無しさん
2018/06/23(土) 14:43:13.01ID:DOoRmJ6H 抽象的な思考ができる人とそうでない人が居るというだけだな
>>890もSTLやboostの使い方が理解できない、良い抽象モデルが作れない人が愚痴ってるだけにしか読めんが
>>890もSTLやboostの使い方が理解できない、良い抽象モデルが作れない人が愚痴ってるだけにしか読めんが
896デフォルトの名無しさん
2018/06/23(土) 14:54:08.05ID:UiVIxiJp 抽象化が目的になって
パフォーマンスとか使用リソースとか工数を軽視する人が実務経験の浅い人に多い
ってのが問題であって
言語自体には罪はない
パフォーマンスとか使用リソースとか工数を軽視する人が実務経験の浅い人に多い
ってのが問題であって
言語自体には罪はない
>>895
>良い抽象モデル
が役に立つとは限らないのでは?
抽象化を目的とするあまりに YAGNI を忘れてしまうのでは、これは重大な思考的欠陥なのでは?
あれほどもてはやされていた GoF は、すくなくとも C++界では、もうみるかげもなく凋落の一途をたどっているのは、どうみるのでしょうか?
>良い抽象モデル
が役に立つとは限らないのでは?
抽象化を目的とするあまりに YAGNI を忘れてしまうのでは、これは重大な思考的欠陥なのでは?
あれほどもてはやされていた GoF は、すくなくとも C++界では、もうみるかげもなく凋落の一途をたどっているのは、どうみるのでしょうか?
898デフォルトの名無しさん
2018/06/23(土) 16:46:26.83ID:8e5n022B デザインパターンって廃れたんですか?
だとすると、なぜ、デザインパターンは流行り、そして廃れたのでしょうか?
一度は流行ったということは確かに役に立つものだったのではないでしょうか?
一度は役に立つと認められたものがなぜ、否定されたのでしょうか?
だとすると、なぜ、デザインパターンは流行り、そして廃れたのでしょうか?
一度は流行ったということは確かに役に立つものだったのではないでしょうか?
一度は役に立つと認められたものがなぜ、否定されたのでしょうか?
899デフォルトの名無しさん
2018/06/23(土) 16:51:17.93ID:7hlQnbj9 日本人は基本すっ飛ばして銀の弾丸欲しがるからな
900はちみつ餃子 ◆8X2XSCHEME
2018/06/23(土) 17:00:49.94ID:/E9OfcV+ >>898
デザインパターンってのは典型的なパターン (に名前を付けたもの) ってだけだよ。
基礎として押さえておくと便利だし、価値が失われたわけではないけど、
何もかもが既存のパターンに当てはまるわけではないという当たり前の話。
デザインパターンってのは典型的なパターン (に名前を付けたもの) ってだけだよ。
基礎として押さえておくと便利だし、価値が失われたわけではないけど、
何もかもが既存のパターンに当てはまるわけではないという当たり前の話。
901デフォルトの名無しさん
2018/06/23(土) 17:15:09.64ID:DOoRmJ6H902デフォルトの名無しさん
2018/06/23(土) 17:29:02.45ID:ul2D0Jgq >>898
別に廃れたわけではなく、使われるものは当たり前に使われてて取り立てて言われなくなっただけ。
別に廃れたわけではなく、使われるものは当たり前に使われてて取り立てて言われなくなっただけ。
>>901
たとえば、iostream をどう思う?これは良い抽象化の例ですか?
たとえば、iostream をどう思う?これは良い抽象化の例ですか?
904デフォルトの名無しさん
2018/06/23(土) 17:31:54.13ID:wjw7dXXk Visual C++6.0です。 Windows7でやってます。
ツールバーを作ると、ボタンを押すとペコってへこんで、また押すとまた戻りますが、見づらいので
押したときと戻ったときとで色を付けたいのですが、どこかにサンプルはないでしょうか
また、私は未だに6.0でやっていてこれで十分にプログラムできるので特にこれで不満はないのですが
もしバージョンを上げれば出来るのであればバージョンアップも考えたいと思っています
最新のバージョンで出来るのなら、そのサンプルも教えて頂けるとありがたいです
ツールバーを作ると、ボタンを押すとペコってへこんで、また押すとまた戻りますが、見づらいので
押したときと戻ったときとで色を付けたいのですが、どこかにサンプルはないでしょうか
また、私は未だに6.0でやっていてこれで十分にプログラムできるので特にこれで不満はないのですが
もしバージョンを上げれば出来るのであればバージョンアップも考えたいと思っています
最新のバージョンで出来るのなら、そのサンプルも教えて頂けるとありがたいです
905デフォルトの名無しさん
2018/06/23(土) 17:40:24.88ID:LiutUffZ >>904
OwnerDraw
OwnerDraw
906デフォルトの名無しさん
2018/06/23(土) 17:59:38.49ID:wjw7dXXk907デフォルトの名無しさん
2018/06/23(土) 18:04:15.08ID:LiutUffZ ナンシークラッツ本を探した方が良いかな
908デフォルトの名無しさん
2018/06/23(土) 18:14:04.63ID:wjw7dXXk ツールバーに色を付けることもできないとか。ちょっと貧弱ですよね
最新のバージョンのVC+でも出来ないのかな。結構そういう要望はあると思うけど
最新のバージョンのVC+でも出来ないのかな。結構そういう要望はあると思うけど
909デフォルトの名無しさん
2018/06/23(土) 19:24:24.28ID:8e5n022B 2分探索木を実装したC++プログラムを読んでいますが、分からないところに出くわしました。
ノードは以下のクラスです:
template <typename T> class BinNode {
private:
T data;
BinNode<T> *left, *right;
BinNode(T d, BinNode<T> *l = NULL, BinNode<T> *r = NULL);
friend class BinarySearchTree;
};
2分探索木のクラス BinarySearchTree 内のメンバ関数 insert の引数としてノードを渡すのですが、
なぜ、
BinNode<int>* tree
ではなく
BinNode<int>*& tree
となっているのかが分かりません。本の説明によると、木構造の変形を可能にするためにそうしているとのことです。
bool BinarySearchTree::insert(int data, BinNode<int>*& tree) {
…
}
ノードは以下のクラスです:
template <typename T> class BinNode {
private:
T data;
BinNode<T> *left, *right;
BinNode(T d, BinNode<T> *l = NULL, BinNode<T> *r = NULL);
friend class BinarySearchTree;
};
2分探索木のクラス BinarySearchTree 内のメンバ関数 insert の引数としてノードを渡すのですが、
なぜ、
BinNode<int>* tree
ではなく
BinNode<int>*& tree
となっているのかが分かりません。本の説明によると、木構造の変形を可能にするためにそうしているとのことです。
bool BinarySearchTree::insert(int data, BinNode<int>*& tree) {
…
}
910デフォルトの名無しさん
2018/06/23(土) 19:25:19.09ID:8e5n022B911デフォルトの名無しさん
2018/06/23(土) 19:28:47.13ID:8e5n022B insert 内に、
if (tree == NULL) {
if (tree == NULL) {
912デフォルトの名無しさん
2018/06/23(土) 19:29:33.57ID:8e5n022B insert 内に、
if (tree == NULL) {
tree = new BinNode<int>(data);
…
}
というコードがありましたが、これのことでしょうか?
if (tree == NULL) {
tree = new BinNode<int>(data);
…
}
というコードがありましたが、これのことでしょうか?
913デフォルトの名無しさん
2018/06/23(土) 19:30:15.04ID:8e5n022B914放置された蟻人間 ◆T6xkBnTXz7B0
2018/06/23(土) 19:30:26.05ID:QXtVRpnb >>909
void f(int *a) {
static int s_i = 0;
a = &s_i;
}
int main(void) {
int i = 3;
int *p = &i;
f(p);
printf("%d\n", *p);
return 0;
}
void f(int *a) {
static int s_i = 0;
a = &s_i;
}
int main(void) {
int i = 3;
int *p = &i;
f(p);
printf("%d\n", *p);
return 0;
}
915デフォルトの名無しさん
2018/06/23(土) 19:45:59.33ID:8e5n022B >>909
これは C の課題ですね。
適当な二分木ないし二分探索木に対して、ノード(節)を追加したり削除したりする関数を書く場合、
C ならば add_node(node **root, ...) と書きます。@
これを C++ ならば add_node(node *&root, ...) と書くこともあります。node *&root は「ポインタ変数の参照」です。A
@とAとではプログラムの表現もかわります。
これは一度、白紙の状態から自分の手で書くのが、理解するのに一番です。お試しあれ。
これは C の課題ですね。
適当な二分木ないし二分探索木に対して、ノード(節)を追加したり削除したりする関数を書く場合、
C ならば add_node(node **root, ...) と書きます。@
これを C++ ならば add_node(node *&root, ...) と書くこともあります。node *&root は「ポインタ変数の参照」です。A
@とAとではプログラムの表現もかわります。
これは一度、白紙の状態から自分の手で書くのが、理解するのに一番です。お試しあれ。
917デフォルトの名無しさん
2018/06/23(土) 21:09:04.41ID:nmsTY6vF 0,115200
1,38400
2,19200
3,9600
こういう関係がある時に配列を作れば1から38400はダイレクトに求められるが
検索を使わずに38400からダイレクトに1を求める方法はないだろうか?
1,38400
2,19200
3,9600
こういう関係がある時に配列を作れば1から38400はダイレクトに求められるが
検索を使わずに38400からダイレクトに1を求める方法はないだろうか?
918デフォルトの名無しさん
2018/06/23(土) 21:22:36.64ID:b0QIE6qX 115200個の配列
919デフォルトの名無しさん
2018/06/23(土) 21:26:12.81ID:EyvIrgyz A/9600 を添え字にして13個の配列で逆引き作る?
920デフォルトの名無しさん
2018/06/23(土) 21:29:09.89ID:b0QIE6qX 9600の倍数であることがわかってるなら割ればテーブルは減る
でも4個なら素直に検索した方が速い
でも4個なら素直に検索した方が速い
921デフォルトの名無しさん
2018/06/23(土) 21:41:29.91ID:EyvIrgyz 検索については同意
元質問は検索使うなって条件なので、まぁ
数値からRS232Cのボーレート設定を想定しちゃうけど、
それなら検索を嫌うようなもんでもないし… な…
元質問は検索使うなって条件なので、まぁ
数値からRS232Cのボーレート設定を想定しちゃうけど、
それなら検索を嫌うようなもんでもないし… な…
922デフォルトの名無しさん
2018/06/23(土) 22:02:58.56ID:ZZklpiyn a1 : b1
a2 : b2
a から、b への辞書と、
b から、a への辞書の、両方を作る
a2 : b2
a から、b への辞書と、
b から、a への辞書の、両方を作る
923デフォルトの名無しさん
2018/06/23(土) 22:07:27.68ID:V32XRqjB924デフォルトの名無しさん
2018/06/23(土) 22:09:33.77ID:5Wb6fwhK n = (x/9600 > 4) ? 0 : 3 - log2f(x/9600);
入力を検証する手間を考えたらテーブル逆引きと大差ないけど
入力を検証する手間を考えたらテーブル逆引きと大差ないけど
925デフォルトの名無しさん
2018/06/23(土) 22:19:10.79ID:V32XRqjB926デフォルトの名無しさん
2018/06/23(土) 22:21:03.20ID:V32XRqjB 普通はこんなものはリニア検索でいい
927デフォルトの名無しさん
2018/06/23(土) 23:23:08.99ID:ZZklpiyn 普通、最適化でも、8個までは線形(全)探索・if 文
それ以上で、ジャンプテーブル・switch-case
それ以上で、ジャンプテーブル・switch-case
928デフォルトの名無しさん
2018/06/23(土) 23:47:49.24ID:UiVIxiJp >>927
ただのテーブル逆変換だぞ
なんでジャンプテーブル?
なんでswitch case?
リニア検索で問題なら2分検索
それでも遅ければハッシュその他のテーブル
簡単な演算を併用出来るものはする
じゃないか普通
ただのテーブル逆変換だぞ
なんでジャンプテーブル?
なんでswitch case?
リニア検索で問題なら2分検索
それでも遅ければハッシュその他のテーブル
簡単な演算を併用出来るものはする
じゃないか普通
929927
2018/06/24(日) 00:50:44.41ID:chBT6m1a コンパイラの最適化について書いた
if 文を8個以上書くと、ジャンプテーブルに変換されるってこと
if 文を8個以上書くと、ジャンプテーブルに変換されるってこと
930デフォルトの名無しさん
2018/06/24(日) 08:15:02.59ID:cbD8du/lレス数が900を超えています。1000を超えると表示できなくなるよ。
ニュース
- 【米FRB】0.25%利下げ決定 3会合連続、雇用下支え [蚤の市★]
- 訪米認証「ESTA」、SNS利用情報の提出義務化へ 日本人観光客も対象に [蚤の市★]
- テレビ朝日本社から20~30代の関連会社社員とみられる男性が転落し死亡 六本木けやき坂通りの通行人にはけが人なし [少考さん★]
- テレビ朝日 本社から男性が転落し死亡。関連会社社員か 当たった通行人が左肩軽傷 [阿弥陀ヶ峰★]
- 「身を切る改革」どこへ? 維新「身内」への公金支出、地方でも続々 [蚤の市★]
- 「残クレ」でマイホーム、国が銀行向け保険 新型住宅ローン普及促す -日経 ★3 [少考さん★]
- 【悲報】俺たちの国民民主党、高市総理の補正予算賛成へwへwwwwwwwwwwwお米券確定wwwwww [257926174]
- 福井県民の最大の罪は俺を神奈川に放流しちゃったこと
- ゲッダン
- 【朗報】VTuber、とうとうスパロボに参戦する
- 高橋洋一、終わる [523957489]
- 毎日菊花茶飲んでたら美肌になったよ
