エスケープシーケンスやWin32APIなどの環境依存なものもOK
そのような質問は必ず環境を書きましょう
半角空白やタブでのインデントはスレに貼ると無くなります
コードを貼れる所
http://codepad.org/
https://ideone.com/
前スレ
【初心者歓迎】C/C++室 Ver.103【環境依存OK】
https://mevius.5ch.net/test/read.cgi/tech/1530384293/
探検
【初心者歓迎】C/C++室 Ver.104【環境依存OK】
レス数が900を超えています。1000を超えると表示できなくなるよ。
2018/12/28(金) 06:04:52.38ID:ufThBpcD
804デフォルトの名無しさん
2019/03/17(日) 19:26:08.56ID:wQNvtjPu puts(“aaa”)やputs(“jais”)はprintf(“a[%d]は%d 〜”)の3つは、プリントデバグのために書いたものです…消し忘れました
すみません
すみません
806デフォルトの名無しさん
2019/04/01(月) 21:33:07.89ID:iIi946R+ class C
{
public:
void f(){}
};
C* pc= new C;
pc.f();
コンパイルエラーが出るってことは、コンパイラはpcがポインタであることを
知ってる
なのになぜ、->と記述させるの?
{
public:
void f(){}
};
C* pc= new C;
pc.f();
コンパイルエラーが出るってことは、コンパイラはpcがポインタであることを
知ってる
なのになぜ、->と記述させるの?
807デフォルトの名無しさん
2019/04/01(月) 21:44:58.77ID:32G7a9z6 std::invoke使え
808デフォルトの名無しさん
2019/04/01(月) 21:52:40.40ID:7SOsx0TI ClassAのメンバにClassBがあってコンストラクタかsetterで外部から与えたいんだけど、
ClassBが大きくてできるだけコピーしたくない場合はどうするのがベストですか?
コピーコンストラクタが呼ばれた場合に初めてコピーされるようにしたいです
unique_ptr<ClassB>型にするとスコープを外れるときに落ちました
Class ClassA{
public:
ClassA(ClassB &b) { m_b.reset(&b); };
ClassA(const ClassA a) : m_b(new ClassB(a.m_b)){};
・・・
private:
unique_ptr<ClassB> m_b;
}
main(){
・・・
{
ClassB b;
ClassA a(b);
} // ここで落ちる
・・・
}
ClassBが大きくてできるだけコピーしたくない場合はどうするのがベストですか?
コピーコンストラクタが呼ばれた場合に初めてコピーされるようにしたいです
unique_ptr<ClassB>型にするとスコープを外れるときに落ちました
Class ClassA{
public:
ClassA(ClassB &b) { m_b.reset(&b); };
ClassA(const ClassA a) : m_b(new ClassB(a.m_b)){};
・・・
private:
unique_ptr<ClassB> m_b;
}
main(){
・・・
{
ClassB b;
ClassA a(b);
} // ここで落ちる
・・・
}
809デフォルトの名無しさん
2019/04/01(月) 22:09:12.99ID:oZ4uWA1m > m_b.reset(&b);
ヒープオブジェクトじゃないものをunique_ptrに突っ込んだらダメ。
カスタムデリータ用意するなら別だけど。
ヒープオブジェクトじゃないものをunique_ptrに突っ込んだらダメ。
カスタムデリータ用意するなら別だけど。
810デフォルトの名無しさん
2019/04/01(月) 22:22:19.12ID:7SOsx0TI811デフォルトの名無しさん
2019/04/01(月) 22:30:43.95ID:0T+gZcjq ClassAはClassBそのものを所有するのか
それとも外部のClassBへの参照を保持するだけなのか?
そのものを所有するなら外部から与えるのではなく
ClassAの中でClassBを構築するのも検討してみれば
// ClassAのコンストラクタ
// 11以降ならムーブとかも
ClassA(ClassBの構築に使う引数) : m_b(前記の引数) {}
それとも外部のClassBへの参照を保持するだけなのか?
そのものを所有するなら外部から与えるのではなく
ClassAの中でClassBを構築するのも検討してみれば
// ClassAのコンストラクタ
// 11以降ならムーブとかも
ClassA(ClassBの構築に使う引数) : m_b(前記の引数) {}
813デフォルトの名無しさん
2019/04/01(月) 22:51:52.32ID:7SOsx0TI ClassBの構築に使う引数も大きいためコピーを避けたいところです
基本的には参照を保持するだけにしたいところですが、ClassBがスコープを外れて破棄される場面ではClassAに実体をコピーできるようにしたいです
基本的には参照を保持するだけにしたいところですが、ClassBがスコープを外れて破棄される場面ではClassAに実体をコピーできるようにしたいです
814デフォルトの名無しさん
2019/04/01(月) 22:59:26.12ID:oZ4uWA1m なんでそこでわざわざコピーしたいの?
最初からnewでヒープに確保すりゃコピー必要ないのに。
最初からnewでヒープに確保すりゃコピー必要ないのに。
815デフォルトの名無しさん
2019/04/01(月) 23:35:23.75ID:32G7a9z6 AにB*とunique_ptr<B>を作って
AがBを使うときは常にB*経由でアクセス
Bを所有させたいときだけunique_ptrにヒープ管理だけさせる
AがBを使うときは常にB*経由でアクセス
Bを所有させたいときだけunique_ptrにヒープ管理だけさせる
816デフォルトの名無しさん
2019/04/01(月) 23:37:44.29ID:7SOsx0TI 2つ持つという発想はありませんでした
試してみます
試してみます
817デフォルトの名無しさん
2019/04/04(木) 17:56:45.10ID:4dlKQxP/ 昔、openGLを使ってC++出遊んでたんですけど、また最近触りたくなりました
皆さんC++で何作ってますか?
個人開発規模でお願いします
皆さんC++で何作ってますか?
個人開発規模でお願いします
>>817
昔作ったツールがひょんなことで役立っています…
あるディレクトリを別のドライブにコピーするだけのことなんですが、いや、まあ、Windows はなかなか御しがたく、path 文字列長が一定範囲を超過すると止まってしまう変てこなコマンドラインツールが未だに現役だったりするのです…
https://mevius.5ch.net/test/read.cgi/tech/1434079972/53
昔作ったツールがひょんなことで役立っています…
あるディレクトリを別のドライブにコピーするだけのことなんですが、いや、まあ、Windows はなかなか御しがたく、path 文字列長が一定範囲を超過すると止まってしまう変てこなコマンドラインツールが未だに現役だったりするのです…
https://mevius.5ch.net/test/read.cgi/tech/1434079972/53
819デフォルトの名無しさん
2019/04/04(木) 20:14:39.57ID:vPLFSwkc820デフォルトの名無しさん
2019/04/04(木) 20:22:00.68ID:USs/shwk Qtのデメリットはライセンスだけだから個人でやる分には良い選択
821デフォルトの名無しさん
2019/04/12(金) 11:39:32.60ID:K5RuTlhq オブジェクト指向を学ぶのにRubyあたりを使うのは
どういうデメリットが?
Pythonは「バージョン違いによる仕様変更」に
入門書レベルのコードが影響されるのであれば「良い選択とは言えない」ことになりそーだけど
どういうデメリットが?
Pythonは「バージョン違いによる仕様変更」に
入門書レベルのコードが影響されるのであれば「良い選択とは言えない」ことになりそーだけど
822デフォルトの名無しさん
2019/04/12(金) 12:37:54.42ID:oOSdboOz >>821
せっかく新しい言語を学ぶなら、近い将来役に立たなくなる言語より他の役に立つ言語を選んだ方が合理的だと思う
せっかく新しい言語を学ぶなら、近い将来役に立たなくなる言語より他の役に立つ言語を選んだ方が合理的だと思う
823デフォルトの名無しさん
2019/04/12(金) 13:47:38.12ID:+CDO09PL pythonて破壊的な変更があったのは20年近く前なのに、未だに古い仕様で書かれた入門書が出回っているなら、オブジェクト指向学習に最適化どうかとは別に、問題な気が。
824デフォルトの名無しさん
2019/04/12(金) 14:05:10.56ID:VR9mZ4dF rubyは古い言語
825デフォルトの名無しさん
2019/04/12(金) 14:50:54.53ID:K5RuTlhq Qt5.12.2はLGPLライセンスでインストールしとけばok?
他のライセンスは初見
他のライセンスは初見
826デフォルトの名無しさん
2019/04/12(金) 14:56:36.82ID:rTBxcnf6 追加パッケージを使わないのならLGPLでおk
827デフォルトの名無しさん
2019/04/12(金) 15:06:17.42ID:K5RuTlhq "Qt Creator 4.8.2 CDB Debugg..." と "MinGW 7.3.0" 64-bit" 入れたら Hello World の窓が表示できるようになったけど、
練習ならそんなかんじでok?
練習ならそんなかんじでok?
828デフォルトの名無しさん
2019/04/12(金) 15:28:10.39ID:VR9mZ4dF しばらく正常に動いてるように観えてても
あとで問題が顕在化して困るパターン
あとで問題が顕在化して困るパターン
829デフォルトの名無しさん
2019/04/12(金) 15:38:10.46ID:K5RuTlhq どのような問題が発生しうるのでしょう?
もっぱら個人用の練習用とする予定
もっぱら個人用の練習用とする予定
830デフォルトの名無しさん
2019/04/12(金) 15:54:14.03ID:rTBxcnf6 Qt始めるならとりあえずこのシリーズ読もう
https://blog.qt.io/jp/category/getting-started-with-qt/
https://blog.qt.io/jp/category/getting-started-with-qt/
831デフォルトの名無しさん
2019/04/12(金) 17:06:12.27ID:K5RuTlhq 私の場合は、インストール〜 "Hello World" については
https://qiita.com/yasumodev/items/399ec89b7205e3c0bab1
https://qiita.com/yasumodev/items/104446261114e9a7352c
を参考にしました。続きについては、御提示のリンク先を試してみますね
https://qiita.com/yasumodev/items/399ec89b7205e3c0bab1
https://qiita.com/yasumodev/items/104446261114e9a7352c
を参考にしました。続きについては、御提示のリンク先を試してみますね
832デフォルトの名無しさん
2019/04/13(土) 12:09:38.16ID:r7SUy1hn ID:K5RuTlhq です
>>826
https://www3.sra.co.jp/qt/licence/index.html を見て『グラフ作成パッケージQt Charts入れておいた方が便利かも』と思い
いったんアンインストールしてみたのですが、
[Qt 5.12.2 のセットアップ] の画面で
Qt Charts
Qt Data Visualization
Qt purchasing
Qt Virtual Keyboard
Qt WebEngine
Qt Network Authrozation
Qt WebGL Streming Plugin
にチェックを入れたとしても LGPL が選べるようです
サードパーティーの追加パッケージで問題となりうる…?
>>826
https://www3.sra.co.jp/qt/licence/index.html を見て『グラフ作成パッケージQt Charts入れておいた方が便利かも』と思い
いったんアンインストールしてみたのですが、
[Qt 5.12.2 のセットアップ] の画面で
Qt Charts
Qt Data Visualization
Qt purchasing
Qt Virtual Keyboard
Qt WebEngine
Qt Network Authrozation
Qt WebGL Streming Plugin
にチェックを入れたとしても LGPL が選べるようです
サードパーティーの追加パッケージで問題となりうる…?
833デフォルトの名無しさん
2019/04/13(土) 12:11:50.81ID:r7SUy1hn >>828
具体的に「どのような問題が顕在化」し「どのように困る」ことになるのでしょうか
クラスとメンバ関数のみの指摘でも構わないので、示していただけませんか?
また、その問題を回避する方法は何なのでしょうか?
具体的に「どのような問題が顕在化」し「どのように困る」ことになるのでしょうか
クラスとメンバ関数のみの指摘でも構わないので、示していただけませんか?
また、その問題を回避する方法は何なのでしょうか?
834デフォルトの名無しさん
2019/04/13(土) 13:57:08.11ID:TvmgiEsJ835デフォルトの名無しさん
2019/04/13(土) 20:47:38.59ID:r7SUy1hn 昔は知らんが5.12.1ならQt ChartsはLGPLで許諾されるよ?
836デフォルトの名無しさん
2019/04/13(土) 20:48:56.62ID:r7SUy1hn 5.12.2だった
837デフォルトの名無しさん
2019/04/13(土) 23:19:58.42ID:TvmgiEsJ はっきりとGPLv3と書かれてる
https://www.qt.io/download
Open Source->Additional features->Data visualization の?を参照
https://www.qt.io/download
Open Source->Additional features->Data visualization の?を参照
838デフォルトの名無しさん
2019/04/14(日) 00:04:08.34ID:El+pt49w 条項はこれから確認する
>>837
インストールの操作手順からしたら
不意打ちも良いとこだなあ
Qt Charts をチェックした状態で[次へ(N)]ボタンを押したときに
「修正を受けたGPLv3」以外のラジオボタンが無効になってないと
UIとしておかしくねえか
あと「100%GPLv3と一致で修正条項なし」なん?
そうだとしたら、なおさらおかしい
>>837
インストールの操作手順からしたら
不意打ちも良いとこだなあ
Qt Charts をチェックした状態で[次へ(N)]ボタンを押したときに
「修正を受けたGPLv3」以外のラジオボタンが無効になってないと
UIとしておかしくねえか
あと「100%GPLv3と一致で修正条項なし」なん?
そうだとしたら、なおさらおかしい
839デフォルトの名無しさん
2019/04/14(日) 00:07:28.45ID:El+pt49w そういえば
LICENSE
などと大文字ファイル名にしないと効力が発生しないとする「糞判例がある」と聞いたことがあるけど、日本の裁判所?
ググっただけでは見つからなかった
最高裁判例なら検索結果の判決文をPDFで読める訳だがなあ
そのようなケースを敷衍すると、帰結として、Qt chartsはLGPLとなりうる
GPLv3 については逐条解説もあるから、そっちの内容も確認してみてちょ(あくまで「解説」)
LICENSE
などと大文字ファイル名にしないと効力が発生しないとする「糞判例がある」と聞いたことがあるけど、日本の裁判所?
ググっただけでは見つからなかった
最高裁判例なら検索結果の判決文をPDFで読める訳だがなあ
そのようなケースを敷衍すると、帰結として、Qt chartsはLGPLとなりうる
GPLv3 については逐条解説もあるから、そっちの内容も確認してみてちょ(あくまで「解説」)
840デフォルトの名無しさん
2019/04/14(日) 00:54:57.43ID:El+pt49w 純粋に「Qt のライセンス」の話なのでスレチ?
copyright notice の表示方法の適切性について、GPLv3って基本的には明確には記載してなくね
ただし今回のケースだと、「インストーラが LGPL によるライセンスを表示した状態」で先に進める以上
0. Definitions. の第8パラグラフ(1) 反対解釈により、「GPLv3は適用されない」と読む余地がある
実際、GPLv3 につき "displays an appropriate copyright notice" してないもの
copyright notice の表示方法の適切性について、GPLv3って基本的には明確には記載してなくね
ただし今回のケースだと、「インストーラが LGPL によるライセンスを表示した状態」で先に進める以上
0. Definitions. の第8パラグラフ(1) 反対解釈により、「GPLv3は適用されない」と読む余地がある
実際、GPLv3 につき "displays an appropriate copyright notice" してないもの
841デフォルトの名無しさん
2019/04/14(日) 00:56:08.63ID:El+pt49w 書き込み制限受けたので続き。多分コレで終わり。
あのインストーラが表示している著作権表示は明確に LGPL だから適用条件満たしてないと解釈する余地がある、と
…わたしはただの学習者だから大騒ぎすることでもねえんだがねえ…
あのインストーラが表示している著作権表示は明確に LGPL だから適用条件満たしてないと解釈する余地がある、と
…わたしはただの学習者だから大騒ぎすることでもねえんだがねえ…
842デフォルトの名無しさん
2019/04/15(月) 21:39:53.28ID:L7qqGgg7 int& a;
int &a;
どっちにすべきでしょうか
int &a;
どっちにすべきでしょうか
843デフォルトの名無しさん
2019/04/15(月) 21:52:39.66ID:zTAvdEPs 好きな方で書け
844デフォルトの名無しさん
2019/04/15(月) 21:56:00.71ID:dimPC8Ge 「すべき」というのは規格表での『shall』のことですか?
それとももっと別の意図がありますか?
それとももっと別の意図がありますか?
845デフォルトの名無しさん
2019/04/15(月) 22:02:16.06ID:1nT5zSFt int & a;
int * b;
int * b;
846はちみつ餃子 ◆8X2XSCHEME
2019/04/15(月) 23:26:36.86ID:94OTneyx std::add_lvalue_reference<int>::type a;
847デフォルトの名無しさん
2019/04/16(火) 07:00:13.97ID:xjyBK9QH そんなこと気にする前に参照の変数を未初期化で使おうとするなよ。
みたいなツッコミを入れたくなるけど、コンパイル時にエラーが出る
間違いは必ず見落としなく直せるから実際は大きな問題じゃないよね。
「ポインタ宣言の * を型名に寄せるか変数名に寄せるか」と同じで
一貫した書き方をするかぎり、どっちでも構わんでしょ。
個人的には「変数名に寄せる」派だけど。
みたいなツッコミを入れたくなるけど、コンパイル時にエラーが出る
間違いは必ず見落としなく直せるから実際は大きな問題じゃないよね。
「ポインタ宣言の * を型名に寄せるか変数名に寄せるか」と同じで
一貫した書き方をするかぎり、どっちでも構わんでしょ。
個人的には「変数名に寄せる」派だけど。
848デフォルトの名無しさん
2019/04/16(火) 08:18:02.67ID:hl7GJiol int& a, &b;
int &a, &b;
自分も後者の方がいい
int &a, &b;
自分も後者の方がいい
849デフォルトの名無しさん
2019/04/16(火) 08:20:49.86ID:GDkTCt4E850デフォルトの名無しさん
2019/04/16(火) 11:22:25.45ID:vZl8q5zB851デフォルトの名無しさん
2019/04/16(火) 12:24:17.44ID:uqcfe1Iw わからない事をここで質問しようとレスを書いてる最中に「わかった!」
ってなることが多々あるんだが、この謎の現象は何なんだ・・・
ってなることが多々あるんだが、この謎の現象は何なんだ・・・
852デフォルトの名無しさん
2019/04/16(火) 12:28:15.56ID:4RjIOnLA 自己解決パターン
質問するときに頭の中が整理される→解決
質問するために再現する必要最小限のコードを書く→問題の切り分けが出来る→解決
いろいろあるが
質問するときに頭の中が整理される→解決
質問するために再現する必要最小限のコードを書く→問題の切り分けが出来る→解決
いろいろあるが
853はちみつ餃子 ◆8X2XSCHEME
2019/04/16(火) 13:21:34.50ID:XnNfa6Fy >>851
何が駄目なのかわかれば解決法は自明であることが多い。
逆に言えば、解決法がわからないときは問題が何であるかわかってなかったりするんだよ。
だから、きちんとした形に質問をまとめれたなら、それはもうほとんど解答でもあるんだ。
この手法を利用してバグを取り除くやり方としてラバーダックデバッギングというものが知られている。
何が駄目なのかわかれば解決法は自明であることが多い。
逆に言えば、解決法がわからないときは問題が何であるかわかってなかったりするんだよ。
だから、きちんとした形に質問をまとめれたなら、それはもうほとんど解答でもあるんだ。
この手法を利用してバグを取り除くやり方としてラバーダックデバッギングというものが知られている。
854デフォルトの名無しさん
2019/04/16(火) 13:51:09.84ID:WfxisTJA C++erならRust学べって風潮嫌い
なんで学習コストがある言語を2つも学ばないといけないのかと思うし
なんで学習コストがある言語を2つも学ばないといけないのかと思うし
855847
2019/04/16(火) 17:31:42.92ID:xjyBK9QH856デフォルトの名無しさん
2019/04/16(火) 17:55:46.56ID:LqBdGBd1 その場合でもコンストラクタで初期化してなかったらエラー出るんだから
説明自体は間違ってない
説明自体は間違ってない
857デフォルトの名無しさん
2019/04/16(火) 21:38:13.69ID:5Rly8M3u >>853
テディベアをおいておくというエピソードなら有名だね
テディベアをおいておくというエピソードなら有名だね
858デフォルトの名無しさん
2019/04/16(火) 22:14:36.94ID:dFuxCqAG >>854
難しいことも違った方向から見るとわかりやすくなることもある。
難しいことも違った方向から見るとわかりやすくなることもある。
859デフォルトの名無しさん
2019/04/19(金) 11:24:45.99ID:qKKG75KJ 質問です。
cinの戻り値のistream&がなんでif(cin)みたいに真偽判定に使えるのかが発端です。
https://stackoverflow.com/questions/8117566/why-istream-object-can-be-used-as-a-bool-expression
こことか見たんですけど、
1.istreamはbasic_iosを継承してて、
2.basic_iosで型変換演算子explicit operator bool() const;が定義されてる
ってとこまでは理解しました
ここからが質問なんですけどこの型変換ってのは勝手に行われるもんなんですかね
if(something)って書いたらif(bool(something))っていつもやってるんでしょうか
cinの戻り値のistream&がなんでif(cin)みたいに真偽判定に使えるのかが発端です。
https://stackoverflow.com/questions/8117566/why-istream-object-can-be-used-as-a-bool-expression
こことか見たんですけど、
1.istreamはbasic_iosを継承してて、
2.basic_iosで型変換演算子explicit operator bool() const;が定義されてる
ってとこまでは理解しました
ここからが質問なんですけどこの型変換ってのは勝手に行われるもんなんですかね
if(something)って書いたらif(bool(something))っていつもやってるんでしょうか
860デフォルトの名無しさん
2019/04/19(金) 11:40:22.57ID:ymX8VCBl intで参照したらEOF
861デフォルトの名無しさん
2019/04/19(金) 12:05:08.07ID:r9r2BfdP 型変換以前に0やnullポインタを評価するとfalse、0以外の値はtrueと評価されると決まっているからだろ。
あと暗黙の型変換はよく起こる。
あと暗黙の型変換はよく起こる。
862デフォルトの名無しさん
2019/04/19(金) 12:08:35.86ID:lgg24wim if 文の条件判定部は bool 型を要求してる前提で解釈,翻訳してるんじゃない
863はちみつ餃子 ◆8X2XSCHEME
2019/04/19(金) 12:13:29.89ID:mypEidUJ864デフォルトの名無しさん
2019/04/20(土) 09:49:03.76ID:9bTTnEnG 前橋和弥さんのC言語ポインタ完全制覇という本で、
PCの環境(CPUの種類など)によってデータのメモリ上の配置は異なる
(構造体のパディングをはじめ、ただの単体のintでさえバイトオーダーが異なる(ワークステーションではビッグエンディアン採用だったりする))
ので、メモリの内容をバイナリでディスク上のファイルに出力したデータは別環境で読み込んで使おうと思ってはいけない
というような事が書いてありましたが、この話はWindows以外の環境や古い環境を前提とした話なのでしょうか?
同書にWindowsではBMPファイルをfwriteでファイルへダンプしていていかにもWindowsらしいとも書いてあるので、
Windows環境ならゲームのセーブデータとしてクラスをまるごとfwriteでバイナリ出力したファイルを別PCでロードしても問題ないのでしょうか?
(Xeonとかワークステーションマザーとか関係なしに、IntelCPU&Windowsの環境ならばリトルエンディアンで統一されている?)
(Macではビッグエンディアンになるが、Windows環境のみ対応のゲームを作る上では無視してよい?)
という認識は間違っているでしょうか?
パディングの違いなどもWindowsやVisualStudioが自動で良きに計らってくれるのならありがたいのですが…
PCの環境(CPUの種類など)によってデータのメモリ上の配置は異なる
(構造体のパディングをはじめ、ただの単体のintでさえバイトオーダーが異なる(ワークステーションではビッグエンディアン採用だったりする))
ので、メモリの内容をバイナリでディスク上のファイルに出力したデータは別環境で読み込んで使おうと思ってはいけない
というような事が書いてありましたが、この話はWindows以外の環境や古い環境を前提とした話なのでしょうか?
同書にWindowsではBMPファイルをfwriteでファイルへダンプしていていかにもWindowsらしいとも書いてあるので、
Windows環境ならゲームのセーブデータとしてクラスをまるごとfwriteでバイナリ出力したファイルを別PCでロードしても問題ないのでしょうか?
(Xeonとかワークステーションマザーとか関係なしに、IntelCPU&Windowsの環境ならばリトルエンディアンで統一されている?)
(Macではビッグエンディアンになるが、Windows環境のみ対応のゲームを作る上では無視してよい?)
という認識は間違っているでしょうか?
パディングの違いなどもWindowsやVisualStudioが自動で良きに計らってくれるのならありがたいのですが…
865デフォルトの名無しさん
2019/04/20(土) 09:54:32.44ID:gSzU4BUh windows間だから「別環境」ではなく「同じ環境」
だからwindowsでも同じ
そのbmpデータをmacに持って行っても使えない
なので磁気コアをダンプして永続化したようなデータは、他の全ての環境で使えない
60年代くらいから知られている
だからwindowsでも同じ
そのbmpデータをmacに持って行っても使えない
なので磁気コアをダンプして永続化したようなデータは、他の全ての環境で使えない
60年代くらいから知られている
866デフォルトの名無しさん
2019/04/20(土) 12:00:13.06ID:9bTTnEnG >>865
Windows環境であれば、別PC(別ハード)でも同環境とみなして良いのですね
>>WindowsではBMPファイルをfwriteでファイルへダンプしていていかにもWindowsらしいとも書いてある
読み直したら、違ってましたm(_ _)m
可変長構造体の節で、
WindowsではBMPをfwriteなどで可変長構造体まるごとダンプしていて、
BMPのような他の環境にもっていく可能性が高いファイルを構造体まるごとダンプしているのがWindowsらしい
というような内容でした
Windows級の一流プログラマーでも構造体まるごと出力を使っているのであれば、
ゲームのセーブデータで構造体やクラスをまるごとバイナリ出力しても問題ないととらえてよいのかな?
Windows環境であれば、別PC(別ハード)でも同環境とみなして良いのですね
>>WindowsではBMPファイルをfwriteでファイルへダンプしていていかにもWindowsらしいとも書いてある
読み直したら、違ってましたm(_ _)m
可変長構造体の節で、
WindowsではBMPをfwriteなどで可変長構造体まるごとダンプしていて、
BMPのような他の環境にもっていく可能性が高いファイルを構造体まるごとダンプしているのがWindowsらしい
というような内容でした
Windows級の一流プログラマーでも構造体まるごと出力を使っているのであれば、
ゲームのセーブデータで構造体やクラスをまるごとバイナリ出力しても問題ないととらえてよいのかな?
867デフォルトの名無しさん
2019/04/20(土) 12:30:10.75ID:4KhiFNHT >>866
bmpファイルには仕様があるので「Windowsのプログラマがどうたら」なんぞ関係無く仕様に従って読み書きすべし
(現実には仕様に従わない入出力をやらかすアプリ毎に対処することはあるが)
自分で定義した構造体でも外部に公開するなら仕様を決めそれに準ずるべし
公開しないならそれこそ構造体丸ごとダンプなり好きにすれば良い
実際にそういう実装は珍しいものじゃない
どうせ環境の変化で困るとしてもそれは自分だけだからね
bmpファイルには仕様があるので「Windowsのプログラマがどうたら」なんぞ関係無く仕様に従って読み書きすべし
(現実には仕様に従わない入出力をやらかすアプリ毎に対処することはあるが)
自分で定義した構造体でも外部に公開するなら仕様を決めそれに準ずるべし
公開しないならそれこそ構造体丸ごとダンプなり好きにすれば良い
実際にそういう実装は珍しいものじゃない
どうせ環境の変化で困るとしてもそれは自分だけだからね
868デフォルトの名無しさん
2019/04/20(土) 12:41:44.36ID:YI/oz/6Z869デフォルトの名無しさん
2019/04/20(土) 13:30:16.46ID:9bTTnEnG つまり、後で困りたくなかったら、フォーマット(読み書きするサイズと順番?)を決めて
構造体のメンバ変数ひとつひとつ読み書きしていかないとだめなのか
…めんどくさいなー
構造体のメンバ変数ひとつひとつ読み書きしていかないとだめなのか
…めんどくさいなー
870デフォルトの名無しさん
2019/04/20(土) 13:36:22.54ID:VX0Nm4MT 異なる環境で扱う可能性のあるファイルならフォーマットを決めるのは当然だが
メンバ毎にアクセスしなければならないかどうかは処理系によるだろう。
仕様さえ合えば構造体で読み書きしてもいいわけで。
メンバ毎にアクセスしなければならないかどうかは処理系によるだろう。
仕様さえ合えば構造体で読み書きしてもいいわけで。
871デフォルトの名無しさん
2019/04/20(土) 13:50:12.18ID:bN8wmmjE 構造体まるごと fread/fwrite した後に
環境に応じて必要な場所だけLE/BE の変換をかける
htons とか htonl とか使う
環境に応じて必要な場所だけLE/BE の変換をかける
htons とか htonl とか使う
872デフォルトの名無しさん
2019/04/20(土) 14:02:21.45ID:lwUZZddo どういう読まれ方をするか分からない時はXML型式のテキストファイルにしてしまう
873デフォルトの名無しさん
2019/04/20(土) 14:59:40.99ID:9bTTnEnG874デフォルトの名無しさん
2019/04/20(土) 15:15:30.02ID:n+3CNjUJ 自分では使ったことないけど、BoostのSerializationは?
875はちみつ餃子 ◆8X2XSCHEME
2019/04/20(土) 16:21:19.89ID:7hm/FBJ7 パーサコンビネータはバイナリファイルに使ってもいいんだよ。
あとは protobuf とかのジェネレータ系のツールもありかな。
あとは protobuf とかのジェネレータ系のツールもありかな。
876デフォルトの名無しさん
2019/04/20(土) 18:28:05.65ID:wS9Za22Y VC++用に使ってるマシンのCPUがivy bridgeのi5の3570なんだけど、
そのマシンでは8の倍数バイトを境界としてパディングが入ってるかんじなんだけど、
Core2Duo世代のCPUだとどうなんだろう?
4の倍数バイトを境界とする様な古いCPUがネットバースト世代以前とかの相当古い環境だとしたら、もう動作対象環境から外しても良い気がしてきた
そうだとしたら、クラスまるごとバイナリ読み書きでよいのかな
そのマシンでは8の倍数バイトを境界としてパディングが入ってるかんじなんだけど、
Core2Duo世代のCPUだとどうなんだろう?
4の倍数バイトを境界とする様な古いCPUがネットバースト世代以前とかの相当古い環境だとしたら、もう動作対象環境から外しても良い気がしてきた
そうだとしたら、クラスまるごとバイナリ読み書きでよいのかな
877デフォルトの名無しさん
2019/04/20(土) 18:51:11.02ID:IzYZbHJM878デフォルトの名無しさん
2019/04/20(土) 19:22:01.02ID:wS9Za22Y >>877
ありがとう
これでどうかな?
//-------------------------------------------------
#include <stdio.h>
#include <conio.h>
class ClassName
{
public:
int int_1;
double double_1;
char char_1;
double double_2;
};
int main(void)
{
ClassName class_obj;
printf("クラスインスタンスのサイズ:%d\n",sizeof(class_obj));
printf("int_1のアドレス:%p\n",&class_obj.int_1);
printf("double_1のアドレス:%p\n",&class_obj.double_1);
printf("char_1のアドレス:%p\n",&class_obj.char_1);
printf("double_2のアドレス:%p\n",&class_obj.double_2);
_getch();
return 0;
}
//-------------------------------------------------
クラスインスタンスのサイズが24なら4の倍数バイト、32なら8の倍数バイトの境界になってると思う
(8の倍数バイトの境界なら、各メンバのアドレス(16進数表示)が全部8違いになってるはず)
ありがとう
これでどうかな?
//-------------------------------------------------
#include <stdio.h>
#include <conio.h>
class ClassName
{
public:
int int_1;
double double_1;
char char_1;
double double_2;
};
int main(void)
{
ClassName class_obj;
printf("クラスインスタンスのサイズ:%d\n",sizeof(class_obj));
printf("int_1のアドレス:%p\n",&class_obj.int_1);
printf("double_1のアドレス:%p\n",&class_obj.double_1);
printf("char_1のアドレス:%p\n",&class_obj.char_1);
printf("double_2のアドレス:%p\n",&class_obj.double_2);
_getch();
return 0;
}
//-------------------------------------------------
クラスインスタンスのサイズが24なら4の倍数バイト、32なら8の倍数バイトの境界になってると思う
(8の倍数バイトの境界なら、各メンバのアドレス(16進数表示)が全部8違いになってるはず)
879デフォルトの名無しさん
2019/04/20(土) 20:52:42.24ID:IzYZbHJM >>878
ソースありがとう
クラスインスタンスのサイズ:32
int_1のアドレス:0036F7A0
double_1のアドレス:0036F7A8
char_1のアドレス:0036F7B0
double_2のアドレス:0036F7B8
これで情報足りるかな?
ttps://i.imgur.com/YAVbZWa.jpg
ソースありがとう
クラスインスタンスのサイズ:32
int_1のアドレス:0036F7A0
double_1のアドレス:0036F7A8
char_1のアドレス:0036F7B0
double_2のアドレス:0036F7B8
これで情報足りるかな?
ttps://i.imgur.com/YAVbZWa.jpg
880デフォルトの名無しさん
2019/04/20(土) 21:11:23.94ID:wS9Za22Y >>879
どうもありがdd
Core2Duoで8バイト境界になってるなら、もう4バイト境界の環境の事は無視しても大丈夫なのかもね
思ったんだけど、もしかしたら、32bit(4バイト)のみ対応のCPUと32bit/64bit(8バイト)両対応のCPUの違いなのかな?
違うかな?そんなに単純な話ではないか・・・
どうもありがdd
Core2Duoで8バイト境界になってるなら、もう4バイト境界の環境の事は無視しても大丈夫なのかもね
思ったんだけど、もしかしたら、32bit(4バイト)のみ対応のCPUと32bit/64bit(8バイト)両対応のCPUの違いなのかな?
違うかな?そんなに単純な話ではないか・・・
881デフォルトの名無しさん
2019/04/20(土) 21:42:31.24ID:QAu79rb4 https://docs.microsoft.com/ja-jp/cpp/build/reference/zp-struct-member-alignment
https://docs.microsoft.com/ja-jp/cpp/preprocessor/pack
だいたい sizeof(class_obj) がコンパイル時定数なことくらいC++やってりゃわかるだろ・・・
https://docs.microsoft.com/ja-jp/cpp/preprocessor/pack
だいたい sizeof(class_obj) がコンパイル時定数なことくらいC++やってりゃわかるだろ・・・
882デフォルトの名無しさん
2019/04/21(日) 00:19:13.52ID:WKly27nG 本質じゃないがxmlじゃなくてjsonがオススメ
もっと突っ込むならyamlがオススメ
もっと突っ込むならyamlがオススメ
883はちみつ餃子 ◆8X2XSCHEME
2019/04/21(日) 01:03:10.69ID:v5pFgDlL YAML は人間が読むこともあるなら可読性とのバランスで選ぶことはあるかもしれんが、
機械可読であればよいような場面で選択する理由は無いんじゃないかな。
既存のライブラリを使えばどれでも手間は大差ないとは思うけど、
バイナリ表現だと MessagePack とか Bencode とかいった選択肢もあるし、
どうして色々なフォーマットが登場したのかというとなんだかんだで「場合による」としか言い様がないからなんで、
まあ主要なやつを一通り特徴を把握しといた方が良いよね。
機械可読であればよいような場面で選択する理由は無いんじゃないかな。
既存のライブラリを使えばどれでも手間は大差ないとは思うけど、
バイナリ表現だと MessagePack とか Bencode とかいった選択肢もあるし、
どうして色々なフォーマットが登場したのかというとなんだかんだで「場合による」としか言い様がないからなんで、
まあ主要なやつを一通り特徴を把握しといた方が良いよね。
884デフォルトの名無しさん
2019/04/21(日) 01:14:51.26ID:VOTCwJrR yamlって何に使うの?
885デフォルトの名無しさん
2019/04/21(日) 03:00:37.96ID:dJmpMhpq yamlよりはjsonかなぁ
886デフォルトの名無しさん
2019/04/21(日) 08:42:04.15ID:nzBarAq0 何にじゃねえな
yamlはperl
jsonはjavascript
時代の流れでjsonが優勢になった
出来ることや表現力はあんまり変わらない
yamlはperl
jsonはjavascript
時代の流れでjsonが優勢になった
出来ることや表現力はあんまり変わらない
887デフォルトの名無しさん
2019/04/21(日) 09:55:35.58ID:0mpGXc/m yamlは最近dockerとかkubanetessとかansibleとかインフラ/環境系ツールのせいでやたら触る事が多い
888デフォルトの名無しさん
2019/04/21(日) 11:02:24.76ID:rR+Epd4r もう16バイト境界なんてのも出てきてるのか
VisualStudioのプロジェクトのプロパティのC/C++のコード生成で
構造体メンバのアライメントを8にするか、
コード上で #pragma pack(8) とすれば
強制的に8バイト境界にできるみたいだけど、
マシンに最適な既定値のアライメントから変更する事で速度が遅くなったり
何か不具合が生じたりするものかな?
VisualStudioのプロジェクトのプロパティのC/C++のコード生成で
構造体メンバのアライメントを8にするか、
コード上で #pragma pack(8) とすれば
強制的に8バイト境界にできるみたいだけど、
マシンに最適な既定値のアライメントから変更する事で速度が遅くなったり
何か不具合が生じたりするものかな?
889デフォルトの名無しさん
2019/04/21(日) 11:17:14.94ID:iFY66t+o 既定のアライメントというのはふつう、メンバの単純型のサイズに合わせられるはず。
16byteの単純型を使うのでなければ16byte境界にする必要もない。
16byteの単純型を使うのでなければ16byte境界にする必要もない。
890デフォルトの名無しさん
2019/04/21(日) 11:17:32.77ID:rR+Epd4r 問題ないなら旧環境との互換性重視で4バイト境界にするのもありかな?
891デフォルトの名無しさん
2019/04/21(日) 11:52:51.02ID:iFY66t+o 互換性重視なら、各メンバを自然なアライメントに配置して手でpaddingを挿入して#pragma pack(1)。
>マシンに最適な既定値のアライメント
少なくともx86の場合、それが4とか8とか決まっているわけじゃない。
>マシンに最適な既定値のアライメント
少なくともx86の場合、それが4とか8とか決まっているわけじゃない。
>>891
#pragma pack なんて MS の方言でしょう?そんなのを使いながら「互換性重視」とか矛盾してませんか?
#pragma pack なんて MS の方言でしょう?そんなのを使いながら「互換性重視」とか矛盾してませんか?
893デフォルトの名無しさん
2019/04/21(日) 12:45:11.23ID:iFY66t+o そこはポイントじゃないから勝手に読み替えて。
894デフォルトの名無しさん
2019/04/21(日) 15:46:14.10ID:ECfCuHga C言語ならともかくC++なのに例外を避けようとする人ってあたまおかしいのかな
標準ライブラリもその他のライブラリも例外を投げる前提なのに頑なに例外を避けようとするってそうとうに筋が悪い非合理的な選択肢だよね
標準ライブラリもその他のライブラリも例外を投げる前提なのに頑なに例外を避けようとするってそうとうに筋が悪い非合理的な選択肢だよね
896デフォルトの名無しさん
2019/04/21(日) 16:03:56.39ID:dJmpMhpq897デフォルトの名無しさん
2019/04/21(日) 16:08:40.35ID:ECfCuHga SJLJの話じゃないです
例外を避けてオレオレエラーコードを返す迷惑な人達の話です
例外を避けてオレオレエラーコードを返す迷惑な人達の話です
898デフォルトの名無しさん
2019/04/21(日) 17:16:18.32ID:ZtsKSKQ7 例外もまともにキャッチされないので
どっちもクソです
どっちもクソです
899デフォルトの名無しさん
2019/04/21(日) 17:17:33.88ID:ym7YjNtF エラーの発生頻度によるのでは?
throwは高コストだから発生頻度が高い場合は戻り値で処理した方がいい
throwは高コストだから発生頻度が高い場合は戻り値で処理した方がいい
900デフォルトの名無しさん
2019/04/21(日) 17:22:58.19ID:nzBarAq0 システムによる
航空機の運航システムでのエラー処理はどうすりゃいいわけさ
航空機の運航システムでのエラー処理はどうすりゃいいわけさ
901デフォルトの名無しさん
2019/04/21(日) 17:53:59.57ID:ECfCuHga >>899
入力の検証、パース以外で頻繁に発生するエラーって例えば何でしょうか?
そもそもthrowはコストそんなに高くないのでは?
エラー情報(コード、メッセージ、下位エラー情報、スタックトレース等)を戻りでコピーしまくるほうが高く付くと思います
入力の検証、パース以外で頻繁に発生するエラーって例えば何でしょうか?
そもそもthrowはコストそんなに高くないのでは?
エラー情報(コード、メッセージ、下位エラー情報、スタックトレース等)を戻りでコピーしまくるほうが高く付くと思います
>>896
自分で実装できないものを、その仕組みもわからないのにホイホイ使ってしまってもいいのでしょうか?
他の言語ならともかく、C/C++er がそういうところに無自覚なのは大いに問題があるのでは?
そんなことでデバッグできますか?
自分で実装できないものを、その仕組みもわからないのにホイホイ使ってしまってもいいのでしょうか?
他の言語ならともかく、C/C++er がそういうところに無自覚なのは大いに問題があるのでは?
そんなことでデバッグできますか?
904デフォルトの名無しさん
2019/04/21(日) 18:28:33.16ID:ECfCuHga >>902
内部構造がわからないものでもAPIドキュメントを読んで使えるようになるのが正しいプログラマでは?
内部構造がわからないものでもAPIドキュメントを読んで使えるようになるのが正しいプログラマでは?
レス数が900を超えています。1000を超えると表示できなくなるよ。
ニュース
- 【速報】中国、水産物輸入停止と通達 「処理水」理由、日本政府へ ★5 [おっさん友の会★]
- 高市首相答弁を“引き出した”立民・岡田克也氏が改めて説明「なぜ慎重な答弁をされなかったのか。非常に残念に思っている」 [ぐれ★]
- 【速報】 米大使「はっきりさせておこう、米国は尖閣諸島含め日本の防衛に全面コミット、中国がどうしようが変わらない」 [お断り★]
- 中国側が首相答弁の撤回要求、日本側拒否★7 [夜のけいちゃん★]
- 自民、経済対策で子ども1人に2万円給付へ 児童手当に上乗せ 所要額は約4000億円 [ぐれ★]
- 日本行き空路49万件キャンセル 中国自粛呼びかけ 日本行きチケット予約の約32%に相当 ★7 [ぐれ★]
- 山上妹「統一信者から安倍自民への投票を求められた」法廷で証言 [947332727]
- 【速報】高市首相「つい言い過ぎた」 存立危機事態の答弁について [237216734]
- 【速報】中国、水産物輸入停止★2 [989870298]
- 【悲報】高市早苗見てると80年前のジャップ女も戦争煽ったってよく分かるよね🥺 [616817505]
- 【ネトウヨ朗報】イギリスのトラス元首相、高市有事で高市早苗の支持を表明 [603416639]
- 【高市訃報】ホタテ業者、死亡😇😇😇 [573041775]
