エスケープシーケンスや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:NYxCuvMY849はちみつ餃子 ◆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/l931デフォルトの名無しさん
2018/06/24(日) 10:44:32.50ID:8StK2ZXu class clsAにconst member 変数を登録したいのだけどうまくいかない。
クラスコンストラクタでconst char *mes[] を{"abc","def"}のように
初期化するにはどうやるの?
クラスコンストラクタでconst char *mes[] を{"abc","def"}のように
初期化するにはどうやるの?
932デフォルトの名無しさん
2018/06/24(日) 10:57:11.49ID:8StK2ZXu //そもそもC++は文字列の配列を扱うことができるのか?
constexpr auto str1 = {"abc", "def"};
これがエラーするんだがなんでなの?
constexpr auto str1 = {"abc", "def"};
これがエラーするんだがなんでなの?
933デフォルトの名無しさん
2018/06/24(日) 11:00:18.70ID:8StK2ZXu constexpr string[] str1 = {"abc", "def"}; コンパイルエラー
constexpr string str1[] = {"abc", "def"}; コンパイルエラー
クッ、、、どうしてもうごかない。
constexpr string str1[] = {"abc", "def"}; コンパイルエラー
クッ、、、どうしてもうごかない。
934デフォルトの名無しさん
2018/06/24(日) 11:15:54.16ID:8StK2ZXu string str1 = "abc"; //OK
vector<int> dat(100,3); //ok
vector<string> str2("aaa",4); //error
こういうのもうごかない。
vector<int> dat(100,3); //ok
vector<string> str2("aaa",4); //error
こういうのもうごかない。
935デフォルトの名無しさん
2018/06/24(日) 11:23:27.77ID:8StK2ZXu 自分としてはストリングを多用するのでストリング配列が使えないと厳しい。
検索をしても例がなかなか出てこないので、Effectiv Modern C++という本
をamazonで買ってみたんだが、届いたので今見ているところだが、ここでも
string配列の記述を巧みに避けている。皆目出てこない。
string配列の扱い方ってどうやるの?
検索をしても例がなかなか出てこないので、Effectiv Modern C++という本
をamazonで買ってみたんだが、届いたので今見ているところだが、ここでも
string配列の記述を巧みに避けている。皆目出てこない。
string配列の扱い方ってどうやるの?
936デフォルトの名無しさん
2018/06/24(日) 11:52:20.14ID:/GbiIoLW 文字配列って良く分からないけど、Javaみたいに一文字だったりして?
{"a","b","c","d","e","f","g"}みたいな?
{"a","b","c","d","e","f","g"}みたいな?
937はちみつ餃子 ◆8X2XSCHEME
2018/06/24(日) 12:32:00.67ID:StWe8jKY938デフォルトの名無しさん
2018/06/24(日) 12:35:35.92ID:QFRKHUIu ["abc","def"];
939デフォルトの名無しさん
2018/06/24(日) 12:36:44.62ID:p8F2e5jx940デフォルトの名無しさん
2018/06/24(日) 13:13:44.88ID:8StK2ZXu string str1 = "abc"; //OK
vector<int> dat(100,3); //ok
//vector<string> str2("aaa",4); //error
// string str1[] = {"abc", "def"}; //error
// const std::vector<std::string> str3 = {"abc", "def"}; //error
// constexpr char *mes1 = "abc"; //error
const char *mes1 = "abc"; //ok
// vector<char *> ch(10,mes1);//error
vector<string> ch(10,str1);//ok
ここまで確認できた。ただしコンパイルが通っただけだから、動くかどうかは不明。
vector<int> dat(100,3); //ok
//vector<string> str2("aaa",4); //error
// string str1[] = {"abc", "def"}; //error
// const std::vector<std::string> str3 = {"abc", "def"}; //error
// constexpr char *mes1 = "abc"; //error
const char *mes1 = "abc"; //ok
// vector<char *> ch(10,mes1);//error
vector<string> ch(10,str1);//ok
ここまで確認できた。ただしコンパイルが通っただけだから、動くかどうかは不明。
941デフォルトの名無しさん
2018/06/24(日) 13:37:02.58ID:8StK2ZXu //C++はchar *[]のコンストラクタでの初期化はできるのか?
class clsA
{
private:
const char *m_name[];
}
//clsA::clsA(char *name[]) : m_name(["mike","tetu"]){};//だめ
//clsA::clsA(char *name[]) : m_name("mike","tetu"){};//これもだめ
//clsA::clsA(char *name[]) : m_name({"mike","tetu"}){};//これもだめ
class clsA
{
private:
const char *m_name[];
}
//clsA::clsA(char *name[]) : m_name(["mike","tetu"]){};//だめ
//clsA::clsA(char *name[]) : m_name("mike","tetu"){};//これもだめ
//clsA::clsA(char *name[]) : m_name({"mike","tetu"}){};//これもだめ
942デフォルトの名無しさん
2018/06/24(日) 13:38:12.37ID:zWtoG2OO サイズ不明だし無理だろ
943デフォルトの名無しさん
2018/06/24(日) 13:41:38.91ID:8StK2ZXu >内部的にヒープを使うようなクラスはほとんど constexpr 非対応だと思う。
constexpr char *mes1 = "abc"; //error
これもだめですね。ヒープは必要ないとおもいますが、、、
constexpr char *mes1 = "abc"; //error
これもだめですね。ヒープは必要ないとおもいますが、、、
944デフォルトの名無しさん
2018/06/24(日) 13:42:37.94ID:8StK2ZXu >>サイズ不明だし無理だろ
コンストラクトする時点でサイズは確定していますが、、、
コンストラクトする時点でサイズは確定していますが、、、
945デフォルトの名無しさん
2018/06/24(日) 13:45:06.66ID:p8F2e5jx お前はまずエラーメッセージをちゃんと読め。
946デフォルトの名無しさん
2018/06/24(日) 14:12:06.73ID:8StK2ZXu //C++はchar *[]のコンストラクタでの初期化はできるのか?
class clsA
{
private:
const char *m_name[];
clsA(char *name[]);
};
//clsA::clsA(char *name[]) : m_name(["Bike","tetu"]){};
/*だめだが可能性がありそう。 Invalidはでていない。
--error message--
#29 expected an expression
*/
//clsA::clsA(char *name[]) : m_name("mike","tetu"){};//これもだめ invalid
/*
Multiple markers at this line
- #2125 invalid initializer for array member
"clsA::m_name"
- #18 expected a ")"
*/
//clsA::clsA(char *name[]) : m_name({"mike","tetu"}){};//これもだめ
/*
* Multiple markers at this line
以下省略
*/
class clsA
{
private:
const char *m_name[];
clsA(char *name[]);
};
//clsA::clsA(char *name[]) : m_name(["Bike","tetu"]){};
/*だめだが可能性がありそう。 Invalidはでていない。
--error message--
#29 expected an expression
*/
//clsA::clsA(char *name[]) : m_name("mike","tetu"){};//これもだめ invalid
/*
Multiple markers at this line
- #2125 invalid initializer for array member
"clsA::m_name"
- #18 expected a ")"
*/
//clsA::clsA(char *name[]) : m_name({"mike","tetu"}){};//これもだめ
/*
* Multiple markers at this line
以下省略
*/
947デフォルトの名無しさん
2018/06/24(日) 14:20:47.48ID:p8F2e5jx すまん、そっちはエラーメッセージじゃ分からん。
string str1[] = {"abc", "def"}; //error
とか
constexpr char *mes1 = "abc"; //error
とかの話。
string str1[] = {"abc", "def"}; //error
とか
constexpr char *mes1 = "abc"; //error
とかの話。
948デフォルトの名無しさん
2018/06/24(日) 14:38:12.08ID:iIKq/Q4Y string関数の第二引数には何の意味がありますか?
試しに文字列を2つ引数に入れても、第一引数しか出力しないみたいですが
↓です
string readFile(const char *filename)
{
ifstream ifs(filename);
return string(istreambuf_iterator<char>(ifs),
istreambuf_iterator<char>());
}
https://www.miraclelinux.com/tech-blog/1n4hgx
試しに文字列を2つ引数に入れても、第一引数しか出力しないみたいですが
↓です
string readFile(const char *filename)
{
ifstream ifs(filename);
return string(istreambuf_iterator<char>(ifs),
istreambuf_iterator<char>());
}
https://www.miraclelinux.com/tech-blog/1n4hgx
レス数が900を超えています。1000を超えると表示できなくなるよ。
ニュース
- 米大統領報道官「日本と強固な同盟維持、中国とも協力」 [少考さん★]
- ミス・ユニバース フィンランド代表の「つり目」写真が波紋… 本人釈明も批判やまず 協会謝罪「徹底的に検証」へ [冬月記者★]
- 【おこめ券】鈴木憲和農相 小泉前農相の備蓄米放出を“反省”「備蓄の円滑な運営を図ってまいります」 [Hitzeschleier★]
- 1人3千円の食品高騰対策、何に使える? あいまいなまま衆院通過 [蚤の市★]
- ゆたぼん 二重手術を報告「めちゃくちゃ気に入っています」 [muffin★]
- 【山形】クマ駆除で誤射した猟友会隊員に町が1663万円請求へ...弾当たり男性大けが2023年 小国町 [nita★]
- 【マギレコ】VIPでマギアレコード&マギアエクセドラ【まどドラ】
- 中国人、ガチ超正論。「日本人がアイヌに対してやったことを『問題ない』とするなら、中国が日本人に同じことをしても文句ないだろう?」 [314039747]
- 【悲報】新米、全く売れなくて倉庫が満杯になってしまうwwwwwwwwwwwwwwwwwwww [802034645]
- 【画像】中国、ガチで未来感ハンパない変態スマホを発明してしまう
- 【高市悲報】ウクライナ、ガチで敗北か?東部の帰属国民投票にかける可能性-ゼレンスキー [888298477]
- 【画像】サーナイト「お、起きないとチューしちゃうぞ…」ボソ
