C++相談室 part132at TECH
C++相談室 part132 - 暇つぶし2ch1:デフォルトの名無しさん
17/10/10 00:11:34.01 nc/5PI4P0.net
次スレを立てる時は本文の1行目に以下を追加して下さい
!extend:on:vvvvv:1000:512
C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレにお願いします。
前スレ
C++相談室 part131
スレリンク(tech板)
このスレもよろしくね。
【初心者歓迎】C/C++室 Ver.101【環境依存OK】
スレリンク(tech板)
■長いソースを貼るときはここへ。■
 URLリンク(codepad.org)
 URLリンク(ideone.com)
[C++ FAQ]
URLリンク(isocpp.org)
URLリンク(www.bohyoh.com) (日本語)
VIPQ2_EXTDAT: default:vvvvv:1000:512:----: EXT was configured

2:デフォルトの名無しさん
17/10/10 00:12:56.93 nc/5PI4P0.net
散々スレ散らかしておいて挙句誰もスレ立てないとか何なんだよおい

3:デフォルトの名無しさん
17/10/10 00:17:51.84 UbDU2trc0.net
>>1

4:デフォルトの名無しさん
17/10/10 00:20:07.57 QENrkQd80.net
swap(a,1);

5:デフォルトの名無しさん
17/10/10 00:34:49.46 xPjXx2fY0.net
int&& x=1;
乙 << x;

6:デフォルトの名無しさん
17/10/10 00:37:53.16 xPjXx2fY0.net
swap(T& x, T& y) { T tmp = x; x = y; y = tmp; }を
swap(T&&x, T&& y) { T&& tmp = x; x = y; y = tmp; }とかやったら死ぬ気しかしない

7:デフォルトの名無しさん
17/10/10 02:42:57.50 wYOMkRRU0.net
2 名前:デフォルトの名無しさん (ワッチョイ bf54-lR6P)[sage] 投稿日:2017/03/31(金) 16:52:18.52 ID:CoeIAoH10
STLつかうと一気に実行ファイルサイズが10倍に?!
環境によるだろ。
俺はBorland-C++5.6.2に -D_RTLDLL オプションを指定して、極力
ランタイムを使用するようにして使っているが、例えばstd::vectorを
使っても使わない時と比べ10Kほどしか増えない
すげえ。ダイナミックリンクしといてファイルサイズが増えないとかいってるよ。この人。
C1010: プリコンパイル済みヘッダーの検索中に予期しない EOF を検出しました。
とかいうエラーが出るんだけどこれってどうすればいいの?
#include <stdafx.h>
後死ね。
言葉が悪いな。それで教えているつもりか。
まぁヒントぐらいにはなったな。
うむごくろう。
---- テンプレ ここまで ----

8:デフォルトの名無しさん
17/10/10 12:31:02.91 EzEz7dGm0.net
テンプレに
>>970が建ててね
辺りを追加しとこうぜ

9:デフォルトの名無しさん
17/10/10 15:13:46.21 S8JfuHhfd.net
開発的なお話で単純に構造体の要素を一つ追加するって危険な行為でしょうか?

10:デフォルトの名無しさん
17/10/10 15:40:18.46 NgeFZ2kOM.net
質問がふわふわし過ぎ
そんなんじゃまともな回答は無理
個人的には
メンバをひとつ追加する程度で
破綻のリスクが増えるというなら
それは元々破綻していて
表面化していないだけだろうと思うが

11:デフォルトの名無しさん
17/10/10 16:32:52.19 S8JfuHhfd.net
>>10
ふわふわしすぎてました
意味合いとしては答えてくれてることで合致してます
メンバ変数を一つ追加することでその他への影響は大きいでしょうか?って意味でした

12:片山博文MZ
17/10/10 16:49:55.22 RmsAElXwd.net
>>11
メンバー変数を増やすと、構造体のサイズが増大する。また、変数の追加する場所によっては、メンバーの相対的な位置が変化する可能性がある。
よって、その構造体のバイナリーインターフェースに依存するプログラムは死亡する可能性がある。

13:片山博文MZ
17/10/10 17:03:33.96 RmsAElXwd.net
例えば、構造体データをバイナリーとしてファイルに出力していたら、サイズの増えた構造体では正しく読み取れない可能性がある。
構造体のメンバーの相対的位置が変化したら、古い構造体を使っている他のプログラムとは相性が悪くなる。

14:片山博文MZ
17/10/10 17:13:40.90 RmsAElXwd.net
Windows APIでは、構造体をバージョン管理して、構造体のサイズで処理を変えたりしている。

15:はちみつ餃子
17/10/10 20:42:09.59 ISsQMV5w0.net
>>14
たまに半端な位置に「予約」とか説明されてるメンバがあったりするよね。
あれはバイナリサイズが変わると困るような理由があるからなんかなぁ。
まあ、たいした理由もなくやっちゃって互換性ゆえに変えられなくなったとかだろうけど。

16:片山博文MZ
17/10/10 22:10:42.42 RmsAElXwd.net
>>15
位置やサイズが違うとバグのもと。
昔はよく
#include <pshpack1.h>
...
#include <poppack.h>
を書いたものだ。

17:デフォルトの名無しさん
17/10/10 22:48:32.16 muYZ22/tM.net
膝を撃ち抜く自由も良し悪しだな。

18:デフォルトの名無しさん
17/10/10 23:50:05.54 4EEs5NsC0.net
cURLを限りなくスペックの低い組み込み機器に入れようとしてるところで問題が起きました
・処理能力が低い
cURLをsystem関数でコマンドライン実行しようとすると、
呼び出す側の処理がCPU50%平均的に食っている+cURLもCPU喰うでまともに通信が出来ません
呼び出す側を落とすとcURLの処理速度は改善されるから
確定でCPUの食い合いが原因ってのもわかっている
対策として下記二つが出たのだけど
・呼び出す側をcURLが実行中はsleepにする
・cURLを実行ファイルで取り込むのではなくプログラミングベースで取り込む
上は常に通信をしているためにsleepを挟むことはできず
下のプログラミングベースについてもクロスコンパイルの問題でなぜか上手く行かない
これ以外の方法で対処方法ってありますか?

19:片山博文MZ
17/10/10 23:55:48.47 RmsAElXwd.net
>>18
なぜかうまくいかないときのエラーメッセージは何だ?

20:片山博文MZ
17/10/11 00:02:11.03 qOpcxgfAd.net
スペックが低いなら、そもそもマルチスレッドが未実装の可能性がある。
ならばsleepは無意味ということになるかも知れない。

21:片山博文MZ
17/10/11 00:06:14.17 qOpcxgfAd.net
スペックが低すぎると、ANSI Cなどの規格に準拠してない恐れがある。
マシンとコンパイラーのマニュアルを確認して、準拠状況を確認しろ。

22:はちみつ餃子
17/10/11 02:03:02.75 xVJHolx50.net
>>18
状況がよくわからんなぁ。
system 関数自体は普通は同期的だよね?
スレッドを分けて system 関数を実行した上で、
メインプロセスと cURL がプロセス間通信

23:はちみつ餃子
17/10/11 02:03:35.16 xVJHolx50.net
してるってことかな。
(すまん、ミスって変なところで投稿してしもうた)

24:はちみつ餃子
17/10/11 02:18:21.03 xVJHolx50.net
この件に関しては >>19 の疑問が当然だなぁ。
クロスビルドでこの手の問題がありがちなのは、
ライブラリのサーチパスとかかな。
ライブラリが見つからんとかメッセージ出てないかね?

25:片山博文MZ
17/10/11 02:27:32.03 qOpcxgfAd.net
URLリンク(www.ne.jp)
forkを使えば、プロセスを分けることができるらしい。

26:デフォルトの名無しさん
17/10/11 06:22:13.21 Fgfx0EWk0.net
>>19
undefined 系統のエラーが沢山出る
arm-linux-gnueabi-gccを使ってコンパイルするとそうなる
ただgccだとエラーは起きない。ただi386系になるから実行環境で動かない
クロスコンパイルでcURLの単体がARMにできているから
.aファイルもARM担っていると思っているのだけどもなっていないのだろうか
objdump実行でARMって文字を確認したからARMだと思いたいとこではあるが…
エラー時の実行例
arm-linux-gnueabi-gcc test.c -o test.out -LXXXXXX -lcurl
通るけどi386系で実行環境で実行できない
gcc test.c -o test.out -LXXXXXX -lcurl
>>22
今の状況はPCA-PCBと通信がしたい。着目しているのはPCA
PCAがPCBと通信をする独自規格を元々持っていたのだけど、そのPCAが持っている独自規格を色々な規格をサポートしているcURLに置き換えるって話
今まではPCAの中のメインプロセス(CPUを一番食っているやつ)が通信を行っていただけだったから特に問題は発生しなかったけども
今回はメインプロセスがcURLをコマンドライン実行で呼び出す設計にしようとしている
そのためメインプロセスと別のcURLというプロセスが起動することになると考えている
なので、実装前にメインプロセスが生きている状態で直接コマンドプロンプトでcURLを実行し、動作検証したら通信自体はできるけど動作がとても遅いってとこ露に行きついた
調べてみると、メインプロセス・cURLともにCPUを食いあって速度が遅くなっていることも確認できて
どうやったら上手く実装できるだろうか…と悩んでいるところです
sleepに関しては実装して確認したわけではないけど、kill -stop PIDで実行したら
上手く行ったからsleepも上手く組み込めば対応できrのではないかと思ってる
>>25
forkでこれ以上増えるとさらに遅くなると思ってる…

27:デフォルトの名無しさん
17/10/11 07:22:11.99 pdXZ47r80.net
メンバ変数が1個増えたぐらいで崩壊するのは
対外的にはカプセル化がうまくいっていない例、
内部的にはクラスのふるまいに激甚な影響を与えるような重大なメンバ変数の追加が
後から必要になるというのはマズーな設計の例、

28:デフォルトの名無しさん
17/10/11 07:26:23.14 pdXZ47r80.net
フォークは低速な外部記憶からプログラムコードを新たにロードする手間が無い分高速な可能性が微レ存、
フォーク先とフォーク元でコードが共有されるためメモリ使用効率も多少UP、
あとサーバとクライアントの関係にある処理を(無理矢理)1本のプログラムとして書けるので
開発環境のリソース自体厳しく制限されていた昔はややうれしかったのかも知れん、、

29:デフォルトの名無しさん
17/10/11 07:54:56.70 pdXZ47r80.net
ていうか根本的な疑問として
CPUが低速であるとわかっていながら応答速度の要求があるタスクの一環に
プロセスの起動を含めるのってどうなんじゃ…
(プロセスやスレッドの起動は低廉なOSでは一般にリアルタイム性が全く最強度で担保されない
応答速度の要求が見積もれていなかったんだとすると極めてご愁傷様な話…

30:デフォルトの名無しさん
17/10/11 20:57:32.43 gwIT2xqO0.net
%%%%4NEL%%%%
000-SAV-&1.0888214%ML<\47MBL%0.2\MSSSS4.213>
1.8882/%B/%SB/<\2/7BL\%\%B!B%47L%Si72B>%10.2%\
002%\B%===>>>52.B<\rbc/2.8>>\7B<<\7LB>>\72S\<%\42%><\br>001BYON$\%7L2%3.33GHz>>>2.3GHz<\br>
41.B%LB%"<<%11.6$%><<\86.1B>>2LB>"B???S3>>71$-?>6%<\br>
082@<\7L@@<\br>
\LOOP>0<1Entra

31:デフォルトの名無しさん
17/10/11 22:47:02.58 pdXZ47r80.net
つかだいたいやるべきこと:
1. プログラムを全般的に速くする
2. (今から可能ならば)要求元とハンドシェークして必要なだけ待ってもらうしくみにする
3. 間に合わせたい処理の優先度を間に合っている処理より上げる
 (できればワーストケースでの応答時間の上限を担保する
>>20
sleepしてもスレッドコンテキストが切り替わらないOSというのはさすがに都市伝説なんじゃ…

32:デフォルトの名無しさん
17/10/12 05:46:12.53 4g8heiq80.net
ハンドシェイカー?時間の支配者?

33:デフォルトの名無しさん
17/10/12 07:21:15.63 K6ixfN2F0.net
訂正
 ×: プログラムを全般的に速くする
 ●: プログラムのボトルネック箇所を探して速くする
この場合プロセスの起動がボトルネックなのはまちがいなさげなのでそこを速くなるように修正汁、

34:デフォルトの名無しさん
17/10/12 09:09:50.72 VRKsQXfP0.net
汁?

35:デフォルトの名無しさん
17/10/12 11:20:59.76 PQ1d1y2O0.net
汁=しろ
2ch地方の方言たい

36:デフォルトの名無しさん
17/10/12 12:07:42.25 GDIRJBKR0.net
汁を知らないのにも今時汁を見られたのにも戸惑う

37:デフォルトの名無しさん
17/10/12 13:46:59.50 CaCBhzNq0.net
cURLでググったらlibcurlってのがある。こっち使えばすべて解決する話じゃないの。
そもそもC++スレなのにlib使わずコマンド経由する理由が謎。

38:デフォルトの名無しさん
17/10/12 14:05:01.65 OhN0e73F6.net
ウンコの画像を生成するプログラムの作り方を教えて下さい

39:片山博文MZ
17/10/12 14:27:08.43 loBt1/dEd.net
>>38
板違い。CG板へ行け。

40:デフォルトの名無しさん
17/10/12 14:29:18.75 OhN0e73F6.net
お願いします!

41:片山博文MZ
17/10/12 14:44:27.75 loBt1/dEd.net
MMD、Blender、メタセコイアなど好きなヤツを使ってオブジェクトを三次元モデリングしろ。
ボーンを設定して、思ったとおりに変形できるようにしろ。
レンダリングして、画像として保存しろ。

42:デフォルトの名無しさん
17/10/12 14:45:58.16 OhN0e73F6.net
線を引いて多様なウンコ画像を生成するプログラムお願いします!

43:片山博文MZ
17/10/12 14:49:53.72 loBt1/dEd.net
基本オブジェクトをいくつか作れ。
基本オブジェクトを変形し、組み合わせれば、求める画像がレンダリングできる。
重力とボーンを考慮すれば自然な形になる。

44:デフォルトの名無しさん
17/10/12 14:52:00.26 y2YbOREJ0.net
AIがウンコ画像を識別できるなら、逆にウンコ画像を生成することもできるのではないか?
これを応用するとエロ画像を識別できるAIにエロ画像を生成させることもできるのでは?

45:片山博文MZ
17/10/12 16:00:49.56 Q2Fs2fOZd.net
まずは、MMD、Blender、メタセコイアのどれかを選んでダウンロード&インストールしろ。

46:デフォルトの名無しさん
17/10/12 19:02:41.71 eq5Al9lp0.net
>ボーンを設定して、思ったとおりに変形
要らんだろ・・・・w
アラレちゃんにつんつんでもさせるのかよ

47:デフォルトの名無しさん
17/10/12 21:58:15.37 9n97WZ1N0.net
cURLの起動云々の話に答えてくれた人ありがとう
応答速度についてはめちゃくちゃ遅いってレベルにならなければ問題なく
プロセスを立ち上げるような処理を入れても問題ないとの判断
極端な話10秒で終わっていたのが20秒になりましたぐらいなら問題なく、これが600秒かかりますとかなら問題あった
実際にプロセスを立ち上げてみて処理させてみたけど
CPUの食い合いがなければこの問題は解決できていると考えている
処理についてsleep入れるのは無理そうってレスしたけども
ソースコードを追ってみたらpollなどではなくwhile&usleepでの待機が存在していて
CPU喰ってたからこいつをちゃんと制御すれば問題なさそうってなりました
考えてくれた人ありがとう

別案件なんだけど何か良い実装方法がないか相談させてほしい

48:デフォルトの名無しさん
17/10/12 22:19:04.32 BE/Y4M/40.net
>while&usleep
時間の掛かる、I/O で、busy wait する奴って、素人だろ

49:デフォルトの名無しさん
17/10/12 22:24:29.13 9n97WZ1N0.net
1. PCA→PCBへのインストールで新規にcURLの実行形式ファイルを入れることになった
2. インストールが完了して再起動をしたら今後はcURLをsystem関数で実行して通信する
この状況下でダウングレードを試みようと考えた時に
3. PCA→PCBへのダウングレード(インストール)をcURLを用いてする
4. インストールが完了して再起動をしたら今後は独自プロトコルでの通信に戻る
こういう状況になった。
その時に、cURLを削除するタイミングが見付からなくて今困っている。
3を実行したときに判断しようとしたのだけどダウングレードだと判断するに至る材料がない。
ファイルを一個ずつ指定して送信して・・・の繰り返しだからリストにcURLがあるかないかも判断できずってなっている

50:デフォルトの名無しさん
17/10/12 22:25:11.03 9n97WZ1N0.net
書いてて気づいたけどこれC++の話じゃないって
もうスレチだと気づいたので無視してください
スレ汚しすまん

51:デフォルトの名無しさん
17/10/13 05:33:30.13 SZtyoNBi0.net
>>48
なるほろ
優先度の低いスレッドのビジーループは必ずしも悪ではないと思っていたが
低速なI/O命令を含むビジーループだと応答性能のドブ捨て度が増すのか、

52:デフォルトの名無しさん
17/10/13 06:42:57.49 /fw1jTt60.net
usleepしてるんなら優先度関係ないだろ
誰だ変なこと言ってるのは

53:デフォルトの名無しさん
17/10/13 07:21:38.02 JHJOvcP00.net
ネット回線なんか、秒の単位だから、busy wait の範囲を超えてる
busy wait は、せいぜい、1ms 以下とか、
マイコン・リアルタイムOS での話

54:デフォルトの名無しさん
17/10/13 10:38:57.55 /fw1jTt60.net
もしかしてusleepがビジーウエイトで実装されているとでも思っているのか

55:デフォルトの名無しさん
17/10/13 10:41:47.57 JHJOvcP00.net
CPU 使用率が、100% になってたんじゃないのか?

56:デフォルトの名無しさん
17/10/13 22:27:44.28 SZtyoNBi0.net
>>52
あるわ;
優先度が高いスレッドにビジーループされるとそいつがsleepしてくれる間隔が
全スレッドの応答時間の下限になってしまう
優先度が低いスレッドのビジーループならsleepを待たずに割り込めるからそこまで甚大にならない
ただしI/O命令があってそいつが数百マイクロ棒かかると
より高いスレッドであってもワーストケースの応答時間が数百マイクロ棒に劣化する

57:デフォルトの名無しさん
17/10/13 22:29:57.37 SZtyoNBi0.net
usleepは普通電気が無駄なのでhaltでもしてハードウェアに割り込みを待たせるが
マルチコア対応OSやったら気分次第でスピンロックでビージループすることもあるかも試練、

58:デフォルトの名無しさん
17/10/13 22:46:36.70 SZtyoNBi0.net
スマン
>usleepは普通電気が無駄なのでhaltでもして
というのは他に実行権待ちのスレッドが無かった場合の話ェ、

59:デフォルトの名無しさん
17/10/13 23:08:17.12 JHJOvcP00.net
OS は、たぶん優先度を上下させるから、要注意。
優先度の低いスレッドでも、カーネルモードに入ると、優先度を上げるのじゃ?
優先度の低いスレッドのカーネルモードが、
優先度の高いスレッドのユーザーモードよりも、優先されるかも?
ただ、CPU 使用率が、100% と表示されていても、
本当は、CPUを使っていない場合もあるとか、聞いた事もある

60:デフォルトの名無しさん
17/10/14 02:15:22.32 hYPsSpip0.net
ウニファイドコールシンタックスはまだか!?

61:52
17/10/14 07:10:59.60 F19RwFTi0.net
>>56
おまえさん、やっぱり前提がおかしいな
> 優先度が高いスレッドにビジーループされると
そんな話してねえぞ
usleepしてるんならと言ったろ
なんでビジーループが出てくるんだよ

62:デフォルトの名無しさん
17/10/14 07:17:25.54 nAGT83AF0.net
>>61
知らん国語の苦情なら>>48に家、

63:デフォルトの名無しさん
17/10/15 15:18:57.35 6+blsnLXd.net
ftpサーバを立てられないからプログラミングまで進まない悲しい
530エラーってなんでえええ
IIS使いにくい

64:デフォルトの名無しさん
17/10/15 15:51:56.38 NUNtAlCN0.net
俺もIISでFTPSサーバ立てられなくて困ってるわ
IIS思った以上に使いにくい
IISでオレオレ証明書を作成して
FTPS通信をcURLで確立したいだけなのに
本当にできるのだろうか

65:デフォルトの名無しさん
17/10/15 20:46:54.60 jTAoV9hu0.net
>>63,64
まあそういう話は適切なスレに行ってしてくるといいぞ

66:片山博文MZ
17/10/15 20:50:15.37 3VVV/TO4d.net
セキュリティソフトやファイアウォールが通信の邪魔をしている場合があるから、気を付けな。

67:デフォルトの名無しさん
17/10/15 21:16:20.68 TMBfPksM0.net
xamppでは出来ないんだっけ

68:デフォルトの名無しさん
17/10/15 21:45:19.70 bPqYmEmS0.net
なんか難しい設定あったかな
SFTPできないならありそうだが

69:デフォルトの名無しさん
17/10/15 21:49:59.50 DZC0OlhV0.net
>>66
そういう実験はまずVMでやれ、だよな
完全に無防備なら本来どうなっていたという話からクリアして
セキュリティの入った環境で引っかかった場合に切り分けをしながら、と

70:デフォルトの名無しさん
17/10/15 23:00:46.02 9R+c2v2L0.net
usleepの実装ってどんな感じ? どれくらいのμ秒の精度出んの?
ループ中に頻繁に読んでいいものなのか?

71:デフォルトの名無しさん
17/10/15 23:29:48.88 lsjR8/6b0.net
色々あるでしょ。
CPUが時計対応ならそっち見るだろうし、最悪ビジーループ。
不安ならchronoで寝るとかもあるぞ。

72:デフォルトの名無しさん
17/10/15 23:39:50.79 9R+c2v2L0.net
ググると最低4msとか出てくるな。MSみたいに最初からミリ秒単位にしとけば変な誤用されないものを。

73:デフォルトの名無しさん
17/10/16 12:13:18.90 iBTaJQF10.net
ガベージコレクションがないのに、安全なオブジェクト指向プログラミングなんてできるんですか?

74:デフォルトの名無しさん
17/10/16 12:22:08.74 VYCnmYA70.net
デ、デストラクタがあるから

75:デフォルトの名無しさん
17/10/16 12:25:47.42 CHd6usgT0.net
ガーベージコレクションも含めて実装するのが真のC++グラマーやでアマチャン

76:デフォルトの名無しさん
17/10/16 12:40:47.29 Ou6sbmAQM.net
GC付きスマポ、誰か作らんかね。

77:デフォルトの名無しさん
17/10/16 14:41:14.09 cwpW48EL0.net
D言語「俺を使えばいいじゃない?」

78:デフォルトの名無しさん
17/10/16 20:49:20.76 EBMdtAZpM.net
cli「もしかして俺の時代?」

79:デフォルトの名無しさん
17/10/16 20:54:28.42 D6Ozm2TBM.net
>>76
誰が使うんだよ?

80:デフォルトの名無しさん
17/10/16 22:26:22.71 uaY9uFi30.net
>>73
RAIIを徹底するのがC++流リソース管理法
いつ走るかわからないGCなんかよりずっとcontrollable

81:デフォルトの名無しさん
17/10/16 23:19:12.53 7Byc8Q4r0.net
GC要求が発生する前にプロセスが完了すりゃいいだけだろ

82:デフォルトの名無しさん
17/10/17 00:26:06.58 hVetZd8l0.net
最近は異常なほど高級言語志向が強いな。

83:デフォルトの名無しさん
17/10/17 06:56:31.57 BJIvhub9M.net
>>81
それGC要らんだろ w

84:デフォルトの名無しさん
17/10/18 06:24:43.21 syxw9nR/d.net
スレッド間の変数の共有って
・pthread時に引数与える
・シングルトン
・グローバル変数
これ以外に何かあるかな?

85:デフォルトの名無しさん
17/10/18 08:44:17.01 qJuCX/Qy0.net
C++を最近学び始めた者なんですが
ファイルへの保存で質問があるんですが良いでしょうか
テキストに保存するのと、バイナリに保存するので
文字列を保存するとバイナリが僅かに小さくなるんですが
vectorを保存すると逆にバイナリのほうがサイズが大きくなるのは
普通のことなんでしょうか?

86:デフォルトの名無しさん
17/10/18 08:46:30.49 qJuCX/Qy0.net
vectorの二次元配列を、forの二重ループで
テキストへは outputfile << data[i][j] << "\t";
バイナリへは outputfile.write((const char*)&data[i][j], sizeof(data[i][j]));
で書き込んでみてるのですが・・・・・・
100×100の配列を書き込むと
テキストが29キロバイト、バイナリが40キロバイトに
配列を大きくすればするほどバイナリが大きくなってしまいます

87:デフォルトの名無しさん
17/10/18 09:34:34.48 lDu9kW4oM.net
>>84
同一アドレス空間である以上、アドレスさえ取れればどんな方法でも共有できると思うよ。

88:デフォルトの名無しさん
17/10/18 09:40:31.86 +1GvmKA80.net
>>86
改行かな?

89:デフォルトの名無しさん
17/10/18 09:41:02.33 MOIHjDBn0.net
>>86
どんなデータかによる。intを保存しようとしててデータが全部一桁ならバイナリの方が大きくなることもあるかもしれない。
まずキャストの使い方が間違ってるので、さっくり消してみよう。
次に読み取り部分を作って正常に読み取れるか見てみよう。

90:デフォルトの名無しさん
17/10/18 09:45:31.83 4annDJqp0.net
>>85
dataの型が解ればもう少し推測できるけど
char data[100][100][MAX_STR_LEN];
だとして
data[0][0] = "data\0qwe"; // "qwe"はゴミ
みたいにnull terminated後の不要なゴミも書き込んでるんじゃない?
バイナリエディタでバイナリファイル覗いてみれば解るかと
サイズから推測するとMAX_STR_LENは4かな

91:デフォルトの名無しさん
17/10/18 09:57:25.60 MOIHjDBn0.net
あ、ofstreamのwriteって引数const char*なのか
ゴメン間違ってるってほどじゃないわ
せいぜいC++っぽくreinterpret_castに変えるくらいか

92:デフォルトの名無しさん
17/10/18 11:54:38.42 hNmHHI30M.net
>>91
いや、私の誤りでした、だろ
何が間違ってるほどじゃないだ
日本語間違えるなよ
>>86
出力したテキストファイルの中身は?何か差分は無いの?
少ない情報出してここで聞くより
見た方がよっぽどわかるだろ

93:デフォルトの名無しさん
17/10/18 11:56:58.03 qJuCX/Qy0.net
レス有難うございます。dataはintのvector二次元配列で
int a=100;
int b=100;
vector< vector<int> > data(a, vector<int>(b));
このdataに、forで
data[i][j] = rand() % 100;
の数字をいれている配列なんです
バイナリ保存したデータを、FavBinEditというものでみてみると
数字と数字のあいだに間隔があいてるので
これがサイズが大きくなってる理由なのかと思うんですが

94:デフォルトの名無しさん
17/10/18 12:47:08.44 J7UI6pACM.net
>>93
int型の100*100配列なら約40K byteなんだから、バイナリファイルは正しいと思うよ。
で、テキストも間違っているとは言いきれない。
例えば一桁の数字が多いなら、バイナリファイルより小さくなるよね?
サイズの違いはあって当然だと思うけど。

95:デフォルトの名無しさん
17/10/18 13:00:53.38 qJuCX/Qy0.net
そういうものなのですか
ネット上に、バイナリに保存するとサイズが小さくなる
という話が多いのでそう思い込んでました
自分には関係無いような、複雑なデータを扱うと小さくなるのかな

96:デフォルトの名無しさん
17/10/18 13:06:46.43 4annDJqp0.net
そういうもんですね 自分もintなら納得です
「rand() % 100」なら文字列にしたとき"0"(=0x30)から"99"(=0x3939)と2byteで収まり
"\t"を付けても 常に4byte(=sizeof(int) システム依存)より小さいですから
バイナリだと0を0x00000000, 99を0x63000000(リトルエンディアン)で保存してます
試しに「rand() % 100」を「10000」とか
"文字列にしたとき'\t'も含めて4文字を越える大きさ"にすれば
サイズが逆転するのが観察できるはずです
・扱う数字が小さいからテキストの方が短くて済んでる
・バイナリなら数字が大きく(当然intの最大値を越えないこと)なってもサイズが一定で済む
余談ながら
バイナリで保存するならバイトオーダー(エンディアン)には注意しとかないと
万が一エンディアンの違うシステムで動作する必要があるときに死ねます

97:デフォルトの名無しさん
17/10/18 16:31:39.68 8P8HMOssx.net
質問です。
とあるクラスのヘッダーに定義している文字列変数(CString)の文字列だけを変更し、ビルドしても、変更が反映されないのですがこれは仕様でしょうか?リビルドすると反映されます。
環境はVisualStudio2015 VC++です。

98:97
17/10/18 16:50:26.75 8P8HMOssx.net
自己レス。最小リビルドを無効にしたら解決しました

99:デフォルトの名無しさん
17/10/18 20:07:45.40 3bYwz/rX0.net
>>83
そう
それが肝心

100:デフォルトの名無しさん
17/10/19 12:49:02.40 LAmWAPnYM.net
>>95
テキスト形式は、装飾次第で肥大化しやすいってだけだよ。
カンマやタブや改行も装飾の一部。
一桁の数字でも、スペース等で桁合わせしたら、それだけで肥大化するしね。
実際のところは、どういうフォーマットで出力してるか次第だけど。
最小桁で出力していて、rand 出力が正規分布に従うと考えれば、計算上約29k byteになるよ。

101:デフォルトの名無しさん
17/10/19 21:31:04.86 4jS9VIw90.net
XMLは糞。ゲイツは正しかった。

102:デフォルトの名無しさん
17/10/21 01:43:03.05 20SzWA3c0.net
無名名前空間内の変数にstaticがついたものを見かけました
このstaticにはどのような意味があるんでしょうか?それぞれ同じような意味だと思い込んでいたのですが・・・

103:デフォルトの名無しさん
17/10/21 03:20:47.47 NGOzoqth0.net
ユニファイドコールシンタックスまだー!?

104:デフォルトの名無しさん
17/10/21 05:36:54.09 NrRI2kzj0.net
>>103
要らねえよ

105:デフォルトの名無しさん
17/10/21 05:39:44.45 NGOzoqth0.net
>>104
黒魔術できるから楽しいぞ。
入ってくれ。

106:デフォルトの名無しさん
17/10/21 05:49:37.85 NGOzoqth0.net
auto R = Handle.ConnectTCP(...).WaitConnect().SendData(...).EndSettion();
auto A = Array.Map(...).Reduse(...).get();
こんな感じのことができるようになる。上は適当。
入ってくれー。

107:デフォルトの名無しさん
17/10/21 06:01:20.72 uavAERV80.net
糞化しようとする勢力に悪意があるな。

108:デフォルトの名無しさん
17/10/21 06:15:26.00 NGOzoqth0.net
一体何と戦っているんだ。

109:デフォルトの名無しさん
17/10/21 06:37:35.81 PyeytVxV0.net
EndSession(SendData(WaitConnect(ConnectTCP(Handle, ...)), ...));

Handle.ConnectTCP(...).WaitConnect().SendData(...).EndSession();
と書けるようにしたいと、そんな感じか?
元ネタの言語はなんだ?お兄さん怒らないから正直に申告しなさいw

110:デフォルトの名無しさん
17/10/21 07:18:06.9


111:0 ID:fkuXV6f/0.net



112:デフォルトの名無しさん
17/10/21 07:40:07.85 NrRI2kzj0.net
>>109
そう書きたいなら最初からそういうAPIにすればいいだけなんだよな

113:デフォルトの名無しさん
17/10/21 07:54:28.52 uavAERV80.net
タイムアウトとか再試行とか異常系コードがてんこもりに入るんだからどうせ分解して書く。
そういう書き方をしたがる人は実務では一切コードを書いてない人だろう。

114:デフォルトの名無しさん
17/10/21 08:13:32.79 SZJ3Irjn0.net
>>112
異常系を入れる場所も階層も選ばないとか昭和初期のプログラマーーカヨ;
ていうか>>109の書式のどっちも分けて書こうと思えば書けるし…

115:デフォルトの名無しさん
17/10/21 08:21:55.02 uavAERV80.net
おれはこういう悪意ある黒魔術師と戦っている。

116:デフォルトの名無しさん
17/10/21 09:17:17.25 fkuXV6f/0.net
ちょっとしたスクリプトとかの書き捨てならワンライナーって言うのもわからなくはないけどC++には要らんわな

117:デフォルトの名無しさん
17/10/21 09:28:17.64 K7BlTjWw0.net
質問です。
int型のポインタが指す値に1を足したいのですが
int *a+=1;と書くと足されるのですが
int *a++;だと足されません
これはなぜでしょうか?

118:デフォルトの名無しさん
17/10/21 09:37:24.91 IwpIepkb0.net
(*a)++;
*(a++);
下の方になってね

119:デフォルトの名無しさん
17/10/21 09:42:55.21 K7BlTjWw0.net
なるほど!
カッコを付けてあげれば良いのですね
ありがとうございました。

120:デフォルトの名無しさん
17/10/21 11:19:52.01 uaVA6cYp0.net
本質を理解しないと だめだぞ。

121:デフォルトの名無しさん
17/10/21 12:50:25.52 bOloMtFq0.net
本質ってなんや?

122:デフォルトの名無しさん
17/10/21 12:59:49.25 OLnfmZiv0.net
基本解ってないバカはC言語からやり直せ
C++なんぞ十年早いわ

123:デフォルトの名無しさん
17/10/21 13:50:17.85 RIH/f2PJ0.net
>>120
演算子には結合の優先順位があるからそれを理解しておけということかと。

124:デフォルトの名無しさん
17/10/21 13:53:20.33 SZJ3Irjn0.net
次はきっと評価順序に依存性がある複数の副作用を同じ式の中でやって泣く

125:デフォルトの名無しさん
17/10/21 14:08:40.10 b0s0lkOv0.net
本質と口走る人間は信用しないようにしている

126:デフォルトの名無しさん
17/10/21 14:27:26.13 duVZds/m0.net
2chは信用しているのかw

127:デフォルトの名無しさん
17/10/21 14:35:07.96 PVB7G2Ex0.net
ここは5chだが。

128:デフォルトの名無しさん
17/10/21 14:50:08.83 fkuXV6f/0.net
>>126
俺はまだ2chから見てる
スレリンク(tech板:126番)

129:デフォルトの名無しさん
17/10/21 19:41:59.47 I0YX3jVB0.net
よし、>>116 からの流れを一言でまとめてやるぞ
必要なときはカッコつけなさい
こうだ

130:デフォルトの名無しさん
17/10/21 19:48:36.37 LO7dvffl0.net
>>117
おまえ病院に行ったほうがいい
変数aの定義でとち狂っている>>116より重症だぞ

131:デフォルトの名無しさん
17/10/21 20:09:03.62 NGOzoqth0.net
>>109
Dにもあるらしいけど、元ネタは没になったペーパー。

132:デフォルトの名無しさん
17/10/21 20:11:00.84 RIH/f2PJ0.net
>>129
初心者が質問でおかしな書き方したが、周りはその意味が分かって会話が通じているんだから、そんなつまらない攻撃的なツッコミする必要ないのでは?

133:デフォルトの名無しさん
17/10/21 20:36:40.01 LO7dvffl0.net
>>131
意味わかった気になってるのは陽性症状だよ
幻視でint *a=+1;が見えた禁治産者がなに必死こいてんだ?

134:デフォルトの名無しさん
17/10/21 20:43:36.23 bW2z389o0.net
またすげえ病的なのが現れたな

135:デフォルトの名無しさん
17/10/21 21:07:43.36 MOgwtCLBH.net
妖精症状かは不明だが『周りはその意味が分かって会話が通じている』という決め付けは危険だし
なにより相手に対して何の説得力も無い

136:デフォルトの名無しさん
17/10/21 21:08:16.87 Hb3Ud/Wn0.net
++*aでいいだろ

137:デフォルトの名無しさん
17/10/21 21:37:44.98 LO7dvffl0.net
>>135
よくねえよ
int ++*a; で何を宣言できるん�


138:セ



139:デフォルトの名無しさん
17/10/21 21:46:20.40 RIH/f2PJ0.net
誰も変数の宣言を問題にしてないと思うよ。君を除いて。

140:デフォルトの名無しさん
17/10/21 21:47:40.59 vcAgy2myd.net
知恵袋とかでよく見る質問者に説教してる奴まんまだwww

141:デフォルトの名無しさん
17/10/21 22:22:59.67 fkuXV6f/0.net
周りがわかってるかどうかはわからんけど>>117はわかって質問者の>>116と会話できてるからいいんじゃね?

142:デフォルトの名無しさん
17/10/21 22:29:56.31 uaVA6cYp0.net
俺が余計なこと言わなきゃよかったんだ

143:デフォルトの名無しさん
17/10/21 22:47:24.45 PyeytVxV0.net
よし、みんな大好きコンセプトの話しようぜw

144:デフォルトの名無しさん
17/10/21 23:16:03.82 ov3vGz/Dr.net
>>141
requires { typename T::type{} }
は文法的に正しいですか?

145:名無しさん@そうだ選挙に行こう! Go to vote!
17/10/22 07:02:44.44 dj2Vz85u0.net
>>137
それが本当なら揃いも揃って阿呆ばっかりということだ
int *a+=1;で何が起きるのかを論じてこそC++の話だ
スレ違いの阿呆どもは出て行け

146:名無しさん@そうだ選挙に行こう! Go to vote!
17/10/22 10:10:22.77 ZvWpZB8L0.net
スレを私物化しててワロタwwwwwwwwwwwwwwwwwww

147:名無しさん@そうだ選挙に行こう! Go to vote!
17/10/22 10:29:24.17 euCeLmcjM.net
>>143
そんなの使うな、で終わり。
議論する価値は無い。

148:名無しさん@そうだ選挙に行こう! Go to vote!
17/10/22 11:13:45.90 Bsg7QecN0.net
うむ、これで>>116の話は終わりだな
めでたしめでたし

149:名無しさん@そうだ選挙に行こう! Go to vote!
17/10/22 12:06:12.78 W+EQ/H9/0.net
>>144
私物化はおまえだ
C++の話をしろボケ

150:名無しさん@そうだ選挙に行こう! Go to vote!
17/10/22 12:09:53.87 W+EQ/H9/0.net
ひとつ手本を見せてやる
#define a aa{nullptr}; aa
int *a+=1;
#undef a
#define aa a
おまえら(たぶん1人)はこれ以下の阿呆だ

151:名無しさん@そうだ選挙に行こう! Go to vote!
17/10/22 12:23:06.98 fUpU+dpH0.net
レベル低い手本だな

152:名無しさん@そうだ選挙に行こう! Go to vote!
17/10/22 19:28:43.25 O4jMcQm7d.net
typedefとdefineの違いすらわかってないのが俺
define A BだとAをBとする
typedef B AだとAをBとする
こうなるだけ?

153:名無しさん@そうだ選挙に行こう! Go to vote!
17/10/22 19:37:19.87 bXoG3HvV0.net
typedefなんかもう使うな
これからはusingだ

154:名無しさん@そうだ選挙に行こう! Go to vote!
17/10/22 19:38:18.60 rLWliBun0.net
>>150
#defineはソースコードのテキストを字面だけで置き換えるだけ。
typedef相当のこと以外にも色々な使い方ができるが、トリッキーなことをして分かりにくくなったり弊害が大きいので、言語仕様が拡充された現在では、なるべく使用すべきでないという風潮になっている。

155:名無しさん@そうだ選挙に行こう! Go to vote!
17/10/22 19:38:36.42 NTIGbrlN0.net
defineは置き換えでtypedefは名前変更
#define SIZE 50, 200
void SetSize(int w, int h)をSetSize(SIZE)って呼ぶことができる
typedefはtypedef std::vector<MyLonglongClassName> MyVector;
とすることで短くできる

156:名無しさん@そうだ選挙に行こう! Go to vote!
17/10/22 19:42:10.58 O4jMcQm7d.net
>>151
>>152
>>153
defineは俺の認識であってると思ってるけど
typedefの名前変更ってなんなんだ
defineでもint hage ってしちゃうと名前変更にならない?

157:名無しさん@そうだ選挙に行こう! Go to vote!
17/10/22 19:49:02.84 rLWliBun0.net
typedefで導入した識別子の名称は、型の名前としてコンパイラが字句解析、意味解析する際に適切に扱ってくれるけど、defineの方は字面を置き換えただけだから文脈によっては意図した通りにならないケースがある。
具体例はすぐに思いつかない…
誰か詳しい人が書いてくれるかも。

158:デフォルトの名無しさん
17/10/22 20:24:28.58 cygPpIjv0.net
typedef int *IntPointer; //A
#define IntPointer int* //B
//Aの場合: int x * const の意味となり、*xは変更可能
//Bの場合: const int *x と展開され、*xは変更不可能のためコンパイルエラー
void f(const IntPointer x) { *x = 0; }

159:デフォルトの名無しさん
17/10/22 20:29:43.27 KI+QlBvW0.net
>>150
#defineは、厳密にはコンパイラの機能では無いんだよね。
ただのテキスト置換なんで、様々なチェックが働かない。
置換後のテキストに対してコンパイルを行うから、エラーも難解になったりする。
対してtypedefはコンパイラの機能。
型に対してのみ別名を付ける事しか出来ないけど、ちゃんと型チェックが行われる。

160:デフォルトの名無しさん
17/10/22 21:05:01.87 eZyQD2ui0.net
typedefを一切使うなというのは無理ゲーすぐる…
std::vector<std::vector<int> > jug_array = new std::vector<std::vector<int> >(5000);
for (std::vector<std::vector<int> >::const_iterator it = jug_array.begin(); it != jug_array.end(); ++it) {
 ...
}
とかゆうのはusingでは多分std::を削れるぐらいだと思う

161:デフォルトの名無しさん
17/10/22 21:07:07.30 Nihr2kgP0.net
そのusingではなく
using hoge = int;
のusingだろ

162:デフォルトの名無しさん
17/10/22 21:50:12.47 DuSJV2Ke0.net
変数宣言に関してはC++03は苦行の極みだったな

163:デフォルトの名無しさん
17/10/22 22:37:08.77 gV0xEv2nr.net
typedef名が無いとintのデストラクターが呼べない
using T = int;
int{}.~T();
typedef名が無いと関数ポインターへの変換関数が書けない(たぶん)
using F = void ();
operator F *() {return nullptr;}

164:デフォルトの名無しさん
17/10/22 22:44:21.85 gV0xEv2nr.net
typedef名が無いと関数型をメンバーポインター型に変形させることができない
using MF = void () const;
MF class_type::* mp;
そして何より、関数内で#defineしたものは関数外に漏れる

165:デフォルトの名無しさん
17/10/22 23:08:06.76 V6KHSGcm0.net
>>158
型推論でいいだろ
auto jug_array = new std::vector<std::vector<int> >(5000);
for(auto it = jug_array.begin(); it != jug_array.end(); ++it) {
 ...
}

166:デフォルトの名無しさん
17/10/23 00:28:15.86 WKKpeTI2r.net
>usingでは多分std::を削れるぐらいだと思う
 ↓
>型推論でいいだろ
これがアスペというやつだな

167:デフォルトの名無しさん
17/10/23 00:38:49.98 a4CoBhRy0.net
>>164
俺も思ったからアスペだわ

168:デフォルトの名無しさん
17/10/23 01:19:27.04 E0HRfOuJ0.net
>>164がアスペという可能性も微レ存

169:デフォルトの名無しさん
17/10/23 02:33:22.14 4YhCJR4W0.net
アスペかどうかはわからないけど話の流れを追わないで字面で反応する人いるよね

170:デフォルトの名無しさん
17/10/23 05:45:22.43 iFI38Dlw0.net
%%%%1000%%%%
000-[HUM%58*73.1\%]/2I/3NM/61.3SNMK%?%3%51.22222222222221%
001-[[[%6/4$17.6135412α3]]]]+DOM+SIL+7%
002-UML7%[61.2[31.5[!%32∂LM17.36%!16.3!%<<<%!HSTOL7%!Q!S!=3m=<2TOL<3Q9A<2.1GHz%,DOK,HAOARA,
003-[[[HEMLOT47[<\41.2%Q,===>[MLS<DPNO<\2.3>#ESOLA!5%!3MLA!>LTOSA>7TONSA>%>%end

171:デフォルトの名無しさん
17/10/23 06:00:11.73 tsKHL/vaM.net
>>164
はあ?
なに言ってるんだこいつ w

172:デフォルトの名無しさん
17/10/23 07:39:17.13 FnrJWB1+0.net
CPUはアスペルガー
アスペルガーはプログラミング対象としては正しい

173:デフォルトの名無しさん
17/10/23 11:48:03.94 L0yyts890.net
そもそも>>158>>163もコード間違ってるし
バカってなんで要らんところでnew使おうとするかね

174:デフォルトの名無しさん
17/10/23 11:49:59.55 L0yyts890.net
あっそうかジャヴァカコーダー上がりか

175:デフォルトの名無しさん
17/10/23 12:28:15.79 L0yyts890.net
ヴァカ+auto→地獄

176:デフォルトの名無しさん
17/10/23 15:37:17.98 a4CoBhRy0.net
>>171
>>165 でアスペ認定された俺も思ったからお前もだな。

177:デフォルトの名無しさん
17/10/23 20:39:12.10 FnrJWB1+0.net
newはちょっと手が滑っただけ;
もちろんスマポとセットで無いとnewとか滅多に使わない

178:デフォルトの名無しさん
17/10/23 21:07:31.46 /BPh9WwQM.net
auto知らなかった老害が暴れてるのか w

179:デフォルトの名無しさん
17/10/23 22:09:17.50 L0yyts890.net
>>176
糞ヴァカは二度と書き込むな
w付けたってお前のヴァカさ加減が軽減されることはないからこのカス

180:デフォルトの名無しさん
17/10/23 22:27:44.44 D0YLsnUF0.net
C言語の知識があるんだけどC++も応用できる?

181:デフォルトの名無しさん
17/10/23 22:37:44.10 /pLbKGxJ0.net
できる!

182:片山博文MZ
17/10/23 22:38:51.33 aoVPN+Cqd.net
>>178
まずはデストラクターの便利さを学んでね。

183:デフォルトの名無しさん
17/10/24 00:14:32.80 HCv33Y/ud.net
auto pointerのこと?
あれいつ見ても使うタイミングわかんないや
define typedefこたえてくれたひとありがとう
>>156のAのやつがなぜこうなるのか頭のなかでさっぱり理解できんけどがんばる

184:デフォルトの名無しさん
17/10/24 01:23:29.92 6ceRFBNE0.net
オートポインターは廃止になった。
スマポ使おう。

185:デフォルトの名無しさん
17/10/24 01:26:01.20 grT3veHx0.net
>>181
Aの場合はint * const x の間違いだろう。
int*型という1つの型全体にconstがかかっている。

186:デフォルトの名無しさん
17/10/24 03:02:15.07 Od9TZRLJ0.net
ポインタは型なのだろうか。

187:デフォルトの名無しさん
17/10/24 03:19:16.91 F7KgZr1H0.net
コードの書かない奴ほどC++をやっつけスクリプト言語化しようとする。
auto馬鹿どもを駆逐せよ。

188:デフォルトの名無しさん
17/10/24 07:17:33.32 4VNEc1KXM.net
>>177, >>185
動的型付けと型推論の違いも理解できない老害ははやくくたばればいいのに

189:デフォルトの名無しさん
17/10/24 08:02:35.16 /FFLOfov0.net
ヴァカが精一杯頑張って吐き出したクッサイ唾がこれ↑

190:デフォルトの名無しさん
17/10/24 08:42:18.81 4VNEc1KXM.net
> 動的型付けと型推論の違いも理解できない老害
は否定できないんだ w

191:デフォルトの名無しさん
17/10/24 10:20:18.72 kyzMRAwBd.net
>>186
autoのことをanyやvariantと勘違いしてるとか?

192:デフォルトの名無しさん
17/10/24 12:37:21.38 /FFLOfov0.net
そんな勘違いしてるとなんで思い込むか全く分からんわ
まあヴァカの考えることなんて分かったら大変だけど

193:デフォルトの名無しさん
17/10/24 12:42:47.65 /FFLOfov0.net
こいつの脳内には「動的型付けと型推論の違いも理解できない老害 」
とやらが住んでいてるんだろうな。
それ少し前のお前自身の姿だからゲラゲラ

194:デフォルトの名無しさん
17/10/24 12:43:32.89 Od9TZRLJ0.net
世の中バカばかり、自分だけがよくわかっている。
ってことでしょうか。

195:デフォルトの名無しさん
17/10/24 16:53:21.77 RCW9qhL70.net
こいつプログラミング板荒らしまわってる某コテハンと同じ臭いがする

196:デフォルトの名無しさん
17/10/24 17:21:11.13 xOeS6ucYM.net
まぁ、もうそろそろNG設定かね。俺は設定した。
大した技術持って無さそうだし。

197:片山博文MZ
17/10/24 17:41:23.62 +CxSIN/Vd.net
2ちゃんねるのコテハンにはろくなヤツがいないって、戦後生まれのじっちゃんが言っていた。

198:片山博文MZ
17/10/24 18:40:29.57 +CxSIN/Vd.net
そろそろ仕事やめて、めしにしようぜ
カレーライスとお子様ランチのどっちがいい?

199:片山博文MZ
17/10/24 18:53:07.38 +CxSIN/Vd.net
ギロッポンでめしにすっべ
今日は俺のおごりだ

200:デフォルトの名無しさん
17/10/24 20:33:42.55 4VNEc1KXM.net
>>190
いきなりスクリプトとか言い出した理由書いてみ
どんな言い訳が見れるのか楽しみだよ w

201:デフォルトの名無しさん
17/10/24 20:44:02.68 yRLde5ii0.net
>>176
左様
autoを見て嘔吐

202:デフォルトの名無しさん
17/10/24 20:53:50.44 YuTKkjXTr.net
auto jug_array = std::vector<std::vector<int>>(5000);
という書き方は2012年ごろにさっちんとメイヤーが広めようとしていた
C++17でこの書き方が広まったら>>185はもう出家するしかない

203:デフォルトの名無しさん
17/10/24 20:55:00.66 FyKtaGrZ0.net
autoに関して応答なさそうですね

204:デフォルトの名無しさん
17/10/24 20:56:05.26 YuTKkjXTr.net
昭和のアロマが強烈

205:デフォルトの名無しさん
17/10/24 21:14:49.95 yRLde5ii0.net
良く考えずに書いたが良く考えたら普通は
std::vector<std::vector<int>> jug_array(5000);
と書くところだったなあ…

206:デフォルトの名無しさん
17/10/24 21:50:21.25 018tmIsf0.net
UWPスレとか毛色が違うみたいだし、C++/CLIスレとか落ちてるんでここで教えて下さい
VS2017のC++/WinRTで新しいプロジェクトを作成
(Visual C++ → Windowsユニバーサル → 単体テストアプリ)
実行すると TEST APP 、Unit Test 、Tests Running の3つの文字が出てくるウィンドウが出てきます
しかし、UnitTestApp.xaml の Application要素の中身は、空っぽです
新しくブランクページを作ると、Page要素になって、デザインできる上にボタン等を貼り付けると
Page要素の中に要素が作られます
Application要素の中身は一体どこにあるのでしょう?

207:デフォルトの名無しさん
17/10/24 22:02:36.84 hjkLVxi70.net
>>204
Xamarin Part6
スレリンク(tech板)

208:デフォルトの名無しさん
17/10/24 22:15:38.33 018tmIsf0.net
>>205
そっちになるんですね、失礼しました、>>204は取り下げて移動します

209:デフォルトの名無しさん
17/10/25 18:49:27.48 qOXOqU1a0.net
c++でダックタイピングのようなものをやりたいです。
void型で受け取ったクラスを自前で用意したインターフェースクラスにキャストして関数を呼び出すって可能ですか?
やり方や参考になるサイトなどあれば教えて欲しいです。
templateでの型消去はコンパイル段階でクラスを知らないせいで弾かれてしまっているようです……

210:デフォルトの名無しさん
17/10/25 19:02:03.57 16XMr+7o0.net
vfptrの実装状況によるから、未知の抽象クラスのメソッドって
呼べないと思うんだが

211:デフォルトの名無しさん
17/10/25 19:20:07.39 qOXOqU1a0.net
>>208
ありがとうございます
やっぱクラスの構成わかんなきゃアクセスしようがないですよね……
exeのlibに依存せずになんとかdll開発できないかと考えてたんですが無理そうですね
諦めます

212:デフォルトの名無しさん
17/10/25 19:21:19.49 Srjg9fpL0.net
>>207
っinterpret_cast?
その代わり、ちゃんと素養のまともなモノを使わないとみ定義でPC死ぬからな。

213:デフォルトの名無しさん
17/10/25 19:28:12.28 Srjg9fpL0.net
URLリンク(msdn.microsoft.com)
reinterpret_castだった。
かなり危ない。

214:デフォルトの名無しさん
17/10/25 19:38:49.97 qOXOqU1a0.net
>>210
ありがとう。これだと型確認回避できるのか……希望が見えてきました
ちょっと試してみます。

215:デフォルトの名無しさん
17/10/25 20:09:22.57 r5sy60NsM.net
おおっと、auto の話題には注意しないとな。

216:デフォルトの名無しさん
17/10/25 20:51:07.58 t7oUy/d3r.net
昭和生まれの老害はそろそろ引退すべき

217:デフォルトの名無しさん
17/10/25 20:55:21.88 SS3Ej639M.net
64年生まれの妹が不憫でならない

218:デフォルトの名無しさん
17/10/25 22:31:10.63 Nep/tIRvd.net
.outからsoファイル呼び出す形を作ってるのだけど
変数の共有するのってグローバル変数にするのとシングルとんみたいなの作る以外にある?
関数の引数にはできない状態だと

219:デフォルトの名無しさん
17/10/26 01:08:27.67 KrANDw+50.net
>>216
グローバル「関数」内にstatic変数なんてどう?
ちょっと範囲が狭くなるけど、スレッドローカルストレージとかも。

220:デフォルトの名無しさん
17/10/26 01:17:12.83 SQPezUK20.net
>>200
OSや組み込み、ドライバでその書き方が広まったら認めてやるよ。
使い捨て、やっつけコードしか書かない小便垂れ小僧が。

221:デフォルトの名無しさん
17/10/26 02:08:33.19 s0ODk43E0.net
イッツautoマーチック

222:デフォルトの名無しさん
17/10/26 03:38:24.52 H69oM85Y0.net
>>216
俺は何かの設定じみたものは環境変数に入れとくこともある。
言語問わず子プロセスでも使えて便利。

223:デフォルトの名無しさん
17/10/26 08:42:36.44 KrANDw+50.net
>>219
まんまやん

224:デフォルトの名無しさん
17/10/26 08:43:28.94 KrANDw+50.net
>>220
ああ、確かに環境変数も使うね。

225:デフォルトの名無しさん
17/10/26 14:14:49.39 yHns7wn+p.net
>>218
パッケージソフトやゲームはガン無視か

226:デフォルトの名無しさん
17/10/26 14:32:13.77 3HeaIUwTd.net
OSと組み込みとドライバって特権階級かなんかなの?

227:デフォルトの名無しさん
17/10/26 14:59:42.90 97gM9QaUa.net
>>218がその世界しか知らない(それ以外は俺にはかんけーない)ということにじゃないかな

228:デフォルトの名無しさん
17/10/26 16:12:23.15 fpqT055X0.net
OS内部とかドライバとか、位置によってはメモリ確保の方法変わってくるし
組み込みで動的にメモリ確保とか怖くってやってらんねーとかじゃい?
静的か自動変数にインスタンスの実体置くなら一応なんとかなるんだろうけど・・・
いや、静的だとコンストラクタがくっそ面倒か? auto とか生きてくるのって、
大抵ばかすかコンテナに要素しこたま抱える様な用途だしな

229:223
17/10/26 16:48:19.15 sfpBhfHr0.net
いやautoの議論にケチつけたつもりは無いよ(俺も滅多にauto使わんし
C++の実用される現場といえばOS、組み込み、ドライバくらいしか挙げない人が多いから釘刺したかっただけ

230:デフォルトの名無しさん
17/10/26 17:11:31.86 kUEk6KjE0.net
auto使わないとか頭固すぎ
使えるところは全てautoだわ

231:デフォルトの名無しさん
17/10/26 17:59:27.25 obzhKUOY0.net
単なるシンタックスシュガーでなんのオーバーヘッドや副作用があるわけじゃ無いしな

232:デフォルトの名無しさん
17/10/26 18:40:54.94 se7vIA1E0.net
auto下痢症

233:デフォルトの名無しさん
17/10/26 18:55:08.38 EF3aiwNW0.net
autoネタ大人気だな
俺もiteratorなんかじゃ迷わずauto使うけど
ポインタすらちゃんと理解してないような奴が無闇にauto使ってるのを見るとね

234:デフォルトの名無しさん
17/10/26 18:57:53.27 KmwbyHDC0.net
それ以上autoの話をするのはアウトだぞ

235:デフォルトの名無しさん
17/10/26 19:55:30.03 se7vIA1E0.net
おぉっと

236:デフォルトの名無しさん
17/10/26 20:20:21.90 8UQnYlEC0.net
同じ話題ばかりで食傷気味、もう吐きそう。
…というこの書き込みも同系ネタで済まぬ。

237:デフォルトの名無しさん
17/10/26 22:27:19.25 oyaJ8gC3M.net
>>229
auto を単なるシンタックスシュガーと言うのもどうかと思うが
とりあえず使わないと言う選択肢はないわ

238:片山博文MZ
17/10/26 22:29:12.27 LcK6lNJBd.net
暇潰しに
URLリンク(github.com)
でも見て行って

239:デフォルトの名無しさん
17/10/26 22:31:49.27 6866r+hk0.net
嘔吐嘔吐、うるせーなぁ(´・ω・`)

240:デフォルトの名無しさん
17/10/27 04:04:41.73 lyx9X4ms0.net
>>228
同感

241:デフォルトの名無しさん
17/10/27 08:02:50.09 O+M8u5Cb0.net
>>233
>>233
>>233

242:デフォルトの名無しさん
17/10/27 08:33:50.52 beF6mKBOd.net
C++使わないとか頭固すぎ
使えるところは全部C++だわ

243:デフォルトの名無しさん
17/10/27 08:39:18.11 2A0a9mBA0.net
単なるシンタックスシュガーでオーバーヘッドとか副作用無いしねw

244:デフォルトの名無しさん
17/10/27 08:39:47.11 2A0a9mBA0.net
いやテンプレートは違うか

245:デフォルトの名無しさん
17/10/27 08:41:10.57 Aa1jtLeH0.net
実は>>213は、>>233のパクリ

246:デフォルトの名無しさん
17/10/27 09:37:02.86 EP/R3fy90.net
ID:2A0a9mBA0 ←こういう馬鹿が本当にC++使ってるとは思えない。無職だろう。

247:デフォルトの名無しさん
17/10/27 09:50:50.86 +sOx5VXfM.net
auto絶対使わないマンってややこしい型も、全部手で書いてるの?
ET使うときとかどうしてんだろ。

248:デフォルトの名無しさん
17/10/27 10:00:22.45 tbT2n0brd.net
テンプレートを除いた部分は単なるシンタックスシュガーだよ?
o->vftbl->f(o, a) と書こうが o->f(a) と書こうが何の違いもない。
テンプレートはチューリングマシンとしての計算能力があるから別だけど。

249:デフォルトの名無しさん
17/10/27 10:25:02.18 n3hllmLr0.net
>>245
ET使う時って評価するときか?
auto a = b + c * d;
これやるとautoの型は式テンプレートで、評価が起きないから困ったことになるぞ
(まだ評価せずに組み合わせる場合は逆にautoが便利だけど)
ET作るときや実装時は確かに型がややこしいけど、普通returnの一文で終わるから
return {うんたらかんたら};
で済むと思う
あと、ET周りの関数の宣言時をautoでやってしまうと、実装完了まで使用できないというのが足かせになると思うぞ

250:デフォルトの名無しさん
17/10/27 11:54:16.72 2++1MvhW0.net
auto使うのって例えば
template <class U, class V>
auto func(U& a, V& b) -> decltype(a + b);
みたいに戻り値の型が簡単に推測しにくい時に使ってるけどな

251:デフォルトの名無しさん
17/10/27 19:49:19.03 +sWf4zsJ0.net
auto LocalFunc = [&]() { ... };

252:デフォルトの名無しさん
17/10/27 22:31:31.38 67YjQzLBM.net
>>248
そのautoは型推論のautoとは違う使い方だよね。
戻値の後置宣言都合によるプレースホルダ的な。

253:デフォルトの名無しさん
17/10/27 22:53:59.94 cIkV9qHA0.net
同じだろう

254:デフォルトの名無しさん
17/10/28 01:40:27.36 rDr3prXm0.net
mapみたいな複数行にまたがるようなのを
for( auto const & r: hoge ){}
とかにまとめる用途にしか怖くて使えんな
意図しない型になってたけどたまたまコンパイルに通ってたとか
後で仕様変更とか根元の hoge 書き換え後にたまたまコンパイルに通ってたりとかで
期待したメソッドの動作にならなかったりとかされるとハマりそうで怖い

255:デフォルトの名無しさん
17/10/28 02:17:51.25 pC+TnRxI0.net
>>252
暗黙の型変換乱用しないかぎりそんな事ならんと思うが

256:デフォルトの名無しさん
17/10/28 08:28:41.62 Jnrw/MWj0.net
テクノロジーに善悪は無い

257:デフォルトの名無しさん
17/10/28 08:44:41.02 rDr3prXm0.net
>>253
暗黙の云々とかoperator=とかが怖いってだけ
それに後から読み返した時、どんな戻り値が欲しかったのかとか
autoだとわかり辛いって事がままあるし、autoはなるべくあちこちに散乱させたくない
.NET方面のvarとかも気持ち悪いったらありゃしない・・・

258:デフォルトの名無しさん
17/10/28 08:56:43.01 JVsxHO5Xd.net
autoの数々の利点のほうが大きいからどの言語でも型推論は基本になってきてるな
メイヤーズも言ってるしマイクロソフトも推奨してるし

259:デフォルトの名無しさん
17/10/28 09:55:15.82 QoaQu2To0.net
autoはどのように推定されるかを理解して使うもので、
断じてバカ用のヘルパーではない
バカ自身はそれがわからないから変な杞憂に陥るってだけ

260:デフォルトの名無しさん
17/10/28 11:02:25.42 J8kLZQh+0.net
バカだけどIDEさんが、IDEさんさえいてくれれば大丈夫だ問題ない

261:デフォルトの名無しさん
17/10/28 12:14:14.53 BDtptoiy0.net
初心者はまずauto使わずにプログラミング出来るようになってからにした方がいいね

262:デフォルトの名無しさん
17/10/28 17:38:09.89 VIxhg0oq0.net
auto使わずにコンパイラの警告レベルを最高、警告は即エラーって設定にして
テンプレートライブラリ使ったテストプログラムを書いてみると
autoのありがた味が分かると思う。
ループの制御変数の型がえらいことになったりするからな。
いわんやイテレータをや。

263:デフォルトの名無しさん
17/10/28 22:00:09.12 Jnrw/MWj0.net
例えば
 Bar x;
 auto z = x;
としたときに、zはの型は必ずBarになってBarの基底クラスになったりしないの?

264:片山博文MZ
17/10/28 22:00:59.73 TWx2GtJid.net
>>261
インスタンスとクラスを区別せよ。

265:デフォルトの名無しさん
17/10/28 22:03:17.64 Jnrw/MWj0.net
Barの基底クラスがFooだとして、
実はBarはコピコンがprivateでなぜかoperator Foo()だけがpublicで定義されているかもしれない
かもしれない運転、

266:デフォルトの名無しさん
17/10/28 22:11:30.59 Jnrw/MWj0.net
あるいは
class Foo {
 void assign(const &Foo) { ... } // (A)
};
class Bar : public Foo {
 void assign(const &Foo) { ... } // (B)
};
Foo x1, x2;
Bar y;
auto z = x1;
z.assign(x2); // (C)
y = z;
とかなときに(C)で呼ばれるassign()はどっち?

267:片山博文MZ
17/10/28 22:12:10.53 TWx2GtJid.net
>>264
試せばわかる。

268:片山博文MZ
17/10/28 22:16:47.80 TWx2GtJid.net
参照なしのautoで代入だから、この場合は同じ型でコピーだね。メソッドは仮想関数でもないから、同じクラスのメソッドが呼ばれるはずだ。

269:デフォルトの名無しさん
17/10/28 22:57:04.67 Jnrw/MWj0.net
C++で起き得るBarとFooのパターン全てについてテストケースを考えるのは無理ゲーすぐる、
auto儲はどのようにして有限の人生と無限に近い(ときに想像を絶する結果をもたらす)C++の自由度との折り合いを付けているのであろうか…

270:片山博文MZ
17/10/28 23:02:38.36 TWx2GtJid.net
かしこいIDE使ってるなら、ビルドしたらその場でautoの型がわかるはず。スマートに行こうぜ、スマートに。

271:デフォルトの名無しさん
17/10/28 23:49:55.51 n2BUqhCar.net
struct S {};
using Bar = S const;
Bar x;
auto z = x;
必ずしも同じ型ではないな

272:デフォルトの名無しさん
17/10/29 01:18:54.15 jdBIz2nU0.net
>>263
それがどんな問題が起きると?
>>264
Bar使われてないじゃん

273:デフォルトの名無しさん
17/10/29 05:32:17.05 0yKrkLYC0.net
大量のC++のコードを読み、大量のC++を書いてきた人は今更シンタックスを変えようとは思わない。
碌にコードを読んだことがない、書かない人が文法を変えたがるのだ。
外国人の日本語入門者が「は」と「が」が難しいからautoにしろ、どっちの意味かは読む人、聞く人が考えろと言ってるうなもの。
ひらがなとカタカナを統一しろとかね。日本人ならそうは思わない。日本語を使い続けて必要な理由を知ってるから。
日本語から「が」がなくなれば不便で仕方がない。
だからauto使いは大学デビューとか言われるのだ。未だコードネイティブではないのだ。
10年使ってからautoが必要かどうか考えろ。答えは明らかだ。

274:デフォルトの名無しさん
17/10/29 07:32:07.72 m60zTw010.net
> 大量のC++を書いてきた人は今更シンタックスを変えようとは思わない。
これは嘘
autoだけでなくtrailing return typeやusing aliasなど
かゆいところにやっと手が届いたシンタックス変更は大歓迎している
C++11以後に拒否反応しまくって、未だにC++98のマゾプレーを続行中の変態は
頭固すぎだ
# 自分で言うのも何だが、俺に頭固いなんて言われるのは極端すぎだ

275:デフォルトの名無しさん
17/10/29 07:55:51.29 Heo7FnD+0.net
>>270
藻前の呼びたかったassign()は実はFoo::assign()(基底クラスの方)だったかもしれないじゃん?

276:デフォルトの名無しさん
17/10/29 08:02:49.06 5nFESEae0.net
ところでこれからC++を始めたいのだが、純粋にC++が始めたいのではなくてc言語の代わりとして
C++を使ってみたい。多少なりともC++�


277:フ方が便利だろうとおもうから。一つ二つ制約があって ROMが256バイトしかない。RAMが8Kしかない。こういう場合に今までROM48Kバイト、RAM8K バイトでおさまっていたプログラムをC++で移植するのは余裕だろうか? それとも便利になる分 スペースがとられてRomエリアが少なすぎるってレベルだろうか?



278:デフォルトの名無しさん
17/10/29 08:05:45.00 6IgW6Wrm0.net
アセンブリで書けるレベルじゃね?それ。

279:デフォルトの名無しさん
17/10/29 08:07:50.71 XRmGRjwZ0.net
>>271
要出典:auto使いは大学デビュー
ラムダ式を変数に入れたいときはどうやるの?
コンテナのイテレータを変数に入れたいときは型名全部書くの?
std::bindの戻り値を変数に入れたいときはどうするの?
何でもかんでもauto使うのはどうかと思うがこういう面倒なところはautoでいいんじゃね

280:片山博文MZ
17/10/29 08:09:27.19 k1qoOab2d.net
>>274
メモリーをけちるなら、STLとかテンプレートとか呼ばれるものはあまり使わない方がいい。
std::coutなどのストリームもダメだ。あれは遅いし、バカ食いする。

281:デフォルトの名無しさん
17/10/29 08:10:20.13 XyYI0EpP0.net
cでもキツいな

282:デフォルトの名無しさん
17/10/29 08:14:51.32 Heo7FnD+0.net
多分printf()がリンクされたら死ぬレベル

283:片山博文MZ
17/10/29 08:19:49.13 k1qoOab2d.net
>>274
256KBの間違いだろ?
まずは、メソッド、デストラクタ、std::stringの3つを学習してみな。便利だとわかるから。

284:デフォルトの名無しさん
17/10/29 08:25:23.25 XRmGRjwZ0.net
>>274
ROMは256Kの誤記だとして
RAM8Kはきついな
マイコン向けの開発環境も無償版や評価版なんてのがあるから一回試した方がいいと思う
コンパイラのオプションで例外と実行時型情報はOFFにするのを忘れずに
C++のコンテナクラス(std::vectorやstd::string)はメモリ不足で使えなさそうだな

285:デフォルトの名無しさん
17/10/29 08:51:05.52 5nFESEae0.net
ROMは256kの間違い。外部RAMは256kbある。(ただしSPIでアクセスするので遅い)
だから8kは純粋にワークとして使える。
8kのRAMがきついと思うのは何故?
C++もワークはスタックを使うと思うけど、プログラムの実行エリアとして例えばクラスインスタンスを
作るのにRAMを消費することになるんだろうか? 動的にインスタンスを作成するとそのクラスが大きいと
RAMエリア(mallocで確保してロードしたら、解放するまではRAMエリアを使う)を圧迫することになる。
ということはRAMをあまり消費しない手法ってあるんだろうか?

286:デフォルトの名無しさん
17/10/29 09:18:10.76 Heo7FnD+0.net
普通は処理系が要求するコード、CONSTデータ、、スタック、初期値付きデータ、BSSの各セクションを
プログラマーが明示的にリンカに指示して割り当てさせるんじゃね;;
これはCもC++も同じなのでCでのやり方を理解しているなんならC++でも同じようにやれば良い
(グローバルなオブジェクトの構築と破棄の手当てが追加になるだけぐらいしか違いが無い

287:デフォルトの名無しさん
17/10/29 09:30:39.20 XRmGRjwZ0.net
>>282
最適化切って動作確認したり、デバッグ用のコードを仕込んだりしてると8Kは意外とすぐに使いきれてしまう
当然プログラムの規模や書き方によるところだから必ず足りないわけではないけど
C++だから足りないというわけではない
元のプログラムがCで書かれてて8Kで動いてたならまぁ大丈夫か

288:デフォルトの名無しさん
17/10/29 09:31:08.74 Heo7FnD+0.net
>>282
>8kのRAMがきついと思うのは何故?
全てはID:5nFESEae0が上記各セクションをROMやRAMにどのように割り付けようとしているのかにかかってゐるのだが、
仮にスタックと初期値つきデータとBSSを全部8 KBのRAMに割り付けた場合、
コード以外の全て(malloc()含む)のメモリ消費がトータルで8 KBに収まらねばならず、
メモリ不足のせいでやれることは相当にきびしくなるとおもー

289:デフォルトの名無しさん
17/10/29 09:38:54.44 0yKrkLYC0.net
ID:XRmGRjwZ0
> RAM8Kはきついな
> コンパイラのオプションで例外と実行時型情報はOFFにするのを忘れずに
> C++のコンテナクラス(std::vectorやstd::string)はメモリ不足で使えなさそうだな
こいつレベル低すぎだろ。ド素人にもほどがある。
完全に組み込み経験なしじゃねーか。学生じゃねーのか。

290:デフォルトの名無しさん
17/10/29 09:49:26.98 6IgW6Wrm0.net
コンテナクラスの消費バイトは12バイト。だっけ?

291:デフォルトの名無しさん
17/10/29 09:56:55.29 Heo7FnD+0.net
sizeof(コンテナクラス)すればワカル、
ただしコンテナに要素の追加でmalloc()される分は別枠

292:デフォルトの名無しさん
17/10/29 10:05:31.40 NWVP0NdTH.net
>>274
論外 勉強目的だろ
自称プロでも 8kB なんて環境で組んだことのある人間なんて少数
普通はデフォルトのスタックサイズやvtableの存在すら知らん
考え直せ

293:デフォルトの名無しさん
17/10/29 10:24:19.89 9Q+tOYh80.net
Microchip マイコン PIC24FJ128GA006-I/PT 16ビット RISC PIC24FJ,
32MHz, 128 kB フラッシュ, 8 kB RAM, 64-Pin
URLリンク(jp.rs-online.com)
8KB RAM は、400円のPIC マイコンとかだろ
そもそも、C++ のコンパイラが無い

294:デフォルトの名無しさん
17/10/29 10:29:34.45 5nFESEae0.net
コンパイラはありますよ。C/C++とうたってるので恐らくC++もできると思うが、、、
TIとかHewとか他にもKeilとか

295:デフォルトの名無しさん
17/10/29 10:41:22.70 5nFESEae0.net
>グローバルなオブジェクトの構築と破棄の手当てが追加になるだけぐらいしか違いが無い
おお、心強いお言葉。
例えば
class MyClass
{
int buf[1000];
int no = 0;
void inputdisp(int aa){
sprintf(buf," aa=%d",aa);
}
};
int sub1()
{
MyClass aaa;
aaa.disp(333);
return 0;
}
こういう場合はaaaはbufは2000バイトのRAMを使うけれども、stackに確保するんだろうか?
aaa自体はrom上にできると考えていい?
それなら、cと混在で徐々にC++に変えていく程度でも問題ないのかなとは思っている。

296:デフォルトの名無しさん
17/10/29 10:52:19.32 Heo7FnD+0.net
>>292
>aaa自体はrom上にできると考えていい?
質問の意味不明 再入力せよ

297:デフォルトの名無しさん
17/10/29 11:05:38.47 5nFESEae0.net
動的にNewを使ってインスタンスを生成した場合には、コードは必


298:然的にRam上に置かれる。しかしスタティックに 生成した場合は、Code部分は原理的にはRom上にも置くことができる。そういう機能があるかどうか?って質問。



299:デフォルトの名無しさん
17/10/29 11:08:14.46 Heo7FnD+0.net
>>294
>動的にNewを使ってインスタンスを生成した場合には、コードは必然的にRam上に置かれる。
断じて否
こういう手合いに騙されてはいけない

300:デフォルトの名無しさん
17/10/29 11:14:29.67 jdBIz2nU0.net
>>292
aaaもbufも同じ場所。大抵のコンパイラでは同じアドレスを指す。C解るならclassをstructに置き換えて考えたらいい。それと一緒。

301:片山博文MZ
17/10/29 11:15:45.86 k1qoOab2d.net
operator newの再定義ね。

302:デフォルトの名無しさん
17/10/29 11:29:26.33 Heo7FnD+0.net
ていうか>>294ハ質問者本人かしつれいorz
>>292のMyClass::inputdisp(int aa)のコードは、名前が適当にマングルされて(*1)
 void hoge(MyClass* this, int aa) // (1)
という2引数の関数としてコードセクションにコードが格納される、というのが真実(*2)(*3)
オブジェクトaaaを動的にNewを使ってインスタンスを生成しようがスタティックに生成しようが、
そんなこととは無関係に、aaa.inputdisp((int型データ))というメソッドの呼び出しは(1)の関数呼び出しにコンパイルされる
*1: ここでは簡単のため’hoge’という名前にマングルされたとしている。本当は引数の型や戻り値も情報として含む名前になるが省略
*2: C++の言語規格でそうせよ決まっているかどうかは知らないが、そう処理する処理系しか無いと思う
*3: コードセクションがROM上なのかRAM上なのかはプログラマーがコードセクションをどう割り付けたかによる

303:デフォルトの名無しさん
17/10/29 12:14:39.69 5nFESEae0.net
>296
うろ覚えで使ってるが、
Section Type of Memory Section Type of Memory
 .bss RAM
 .stack RAM
 .data RAM
 .sysmem RAM
 .text  ROM   これがコード部分
 .その他 ROM
こういうのがある。
Hewの場合#pragumaでセクションを生成できたとおもうが、一般的に#pragma とかで割り当てできるんだろうか?
今回はTiのコンパイラを使う予定なので初めての試み。
多分 
static Myclass aaa;
みたいにスタティックかなにかを冠して宣言すれば.textにコードは配置されると思うが、どうなんだろう。
スタティックなんだから原理的には配置はどうにでもなる筈。

304:デフォルトの名無しさん
17/10/29 12:18:36.34 5nFESEae0.net
問題はスタティックにした場合, コードは.textに配置されるとしてもdataが.dataに配置されると非常にまずい。
スタックでやってもらえないと困る。

305:デフォルトの名無しさん
17/10/29 12:34:41.62 n8H8yUIJM.net
>>300
関数が再入されることを考えたら普通にスタックに配置されると思うよ。
むしろstaticにしたらスタックには配置されない。
ここまでインスタンスの話。
コードはいずれにしても.textに配置されると思うよ。特に指定がない限り。でもそれは>>300にとっても問題にならないかと。

306:デフォルトの名無しさん
17/10/29 12:40:57.57 oFRxn/Jf0.net
>>289
30年ぐらい前に ROM2KB, RAM2KB の Z80 ボード用プログラムをC言語で作ったことあるよ。

307:デフォルトの名無しさん
17/10/29 12:43:00.92 5nFESEae0.net
例えば、パネル表示をまとめたクラスのような場合にはクラスのメソッド部分が非常に大きくなる。しかもライブラリ
的に使うわけだから、階層のわりと下で使うことになる。3階層あって、2階層目くらいから同時にいくつかが
生成されてしまう可能性も高い。するとRAMエリアが直ぐにパンクする。なのでメソッドを大量に含んだライブラリ的な
働きをするクラスに関しては、.textにあってほしい。それは可能だと思うがじゃあそのクラス内でつかうバッファなどの
変数なんかが問題になる。これは動的に生成しないとクラスの使い道が非常に限られてくる。第一suba()で使っていて
subb()で使うとバッファエリアが壊れてしまう。
1.bufを持てないクラスなんて殆ど意味がない。
2.bufをスタティックにしか配置できないクラスなんて使い道がない。
3.小規模マイコンでメソッドをramに確保するなんて馬鹿げている。
これは明らかだよね。
 つまりMyclassのbuf[1000]、メソード関数()(例えば50個)をスタックと.textにそれぞれ上手く配置する工夫が
絶対に必要ってことだね。

308:デフォルトの名無しさん
17/10/29 12:45:06.72 5nFESEae0.net
>コードはいずれにしても.textに配置されると思うよ。特に指定がない限り。でもそれは>>300にとっても問題にならないかと。
であれば何も問題ないですね。

309:sage
17/10/29 12:54:06.20 t3scGPtZ0.net
組み込みはPCで動くの違って配置も考えないといけないから大変だな
マイコンでの配置に関してはここより組み込みが普通の電電板のマイコンスレでの方が良いような気がするが。

310:デフォルトの名無しさん
17/10/29 16:49:46.36 9sOuhtQV0.net
>>274
純粋にC言語の書き方するだけならコンパイラの能力次第だと思う

311:デフォルトの名無しさん
17/10/29 18:26:51.08 5nFESEae0.net
ヘッダファイルに型定義して、実装をCPPに書くのってどうかなーと思う。特に組み込み
だとファイルを分ける意味がわからない。分けるとクラスのイメージが掴みにくい気がする。

312:片山博文MZ
17/10/29 18:28:45.31 k1qoOab2d.net
>>307
コンパイル時間短縮とか中身の隠蔽とかしたいなら、ソースとヘッダーを分けてもいいんじゃね?

313:デフォルトの名無しさん
17/10/29 18:58:48.05 9sOuhtQV0.net
>>307
その定義した型を他のファイルから使う時はどうするのさ?
単一のファイルしか使ってないなら分ける必要はないけど

314:デフォルトの名無しさん
17/10/29 19:08:11.02 5nFESEae0.net
クラスってのは型の定義なんだから、使う時は全部インクルードではだめなの?
例えば
clsAAA.h
clsBBB.h
...
clsXXX.h
main.cpp
の中で
include "cls\clsAAA.h"
include "cls\clsBBB.h"
....
include "cls\clsXXX.h"

315:デフォルトの名無しさん
17/10/29 19:13:52.28 5nFESEae0.net
>コンパイル時間短縮とか中身の隠蔽とかしたいなら、ソースとヘッダーを分けてもいいんじゃね?
100個くらいクラスがあってもどってことないと思うが、、、ロード時間が問題になるんだったら
clsディレクトリにクラスファイルを入れて
prtディレクトリにメソッドを実装しない型だけ抜き出したのを入れといて、xxx.prtをインクルードする
方がいいと思う。

316:デフォルトの名無しさん
17/10/29 19:15:39.48 5nFESEae0.net
prtは自動生成できるって前提だy。

317:デフォルトの名無しさん
17/10/29 19:18:10.19 5nFESEae0.net
やっぱりメッソドがデータなんかと分離するのはわかり難い。他のオブジェクト指向のコンパイラでもそんなことはしないしね。

318:デフォルトの名無しさん
17/10/29 19:21:46.87 qxWnFrvp0.net
ヘッダだけだと循環参照起きるし、循環参照起きるところだけcppってのも気持ち悪い

319:デフォルトの名無しさん
17/10/29 19:34:33.73 XE573cMW0.net
>>313
分けなきゃいけないことはない
分けた方が効率が良い(場合が多い)というだけだから
理解した上で敢えて分けないならそれはそれで好きにすれば良い

320:片山博文MZ
17/10/29 19:36:43.09 k1qoOab2d.net
>>314
inlineキーワード使って定義もヘッダーに書いちゃえば?

321:デフォルトの名無しさん
17/10/29 20:07:38.66 9sOuhtQV0.net
>>307
> ヘッダファイルに型定義して、実装をCPPに書くのってどうかなーと思う。
>>310
> クラスってのは型の定義なんだから、使う時は全部インクルードではだめなの?
いったい何をどうしたいのかさっぱりわからん

322:デフォルトの名無しさん
17/10/29 20:13:48.53 5nFESEae0.net
>314
前方宣言でいいのでは?
そういうのは特殊な場合だけだから

323:デフォルトの名無しさん
17/10/29 22:07:47.02 qxWnFrvp0.net
>>318
class Aからclass Bのメソッドを呼んで
class Bからclass Aのメソッドを呼ぶ場合前方宣言だけでは無理なはず

324:片山博文MZ
17/10/29 22:10:20.28 k1qoOab2d.net
>>319
宣言を両方最初に書いておき、定義を後に書く。

325:デフォルトの名無しさん
17/10/29 22:21:25.90 qxWnFrvp0.net
>>320
class Aとclass Bが同じファイルで定義されてるならいいかもしれないけど、そうじゃない場合のほうが多いでしょ

326:デフォルトの名無しさん
17/10/29 22:40:54.16 5nFESEae0.net
いづれにしてもメソッドをばらして別ファイルに書くほうが良いという根拠にはならんだろ。

327:デフォルトの名無しさん
17/10/29 22:52:18.92 qxWnFrvp0.net
一部分けなきゃできないところがあるから全部分けるだけで、できるならc#とかみたいに全部一つのファイルに書きたい

328:デフォルトの名無しさん
17/10/29 23:53:27.12 OlzRTZr+0.net
それだとクラスが縦に長くなって範囲がぱっと見わからなる
1クラス1ファイルの場合はいいけどさ

329:デフォルトの名無しさん
17/10/30 01:18:16.05 ImI1HNcW0.net
てかコードの利用者はヘッダしか見ねーんだから普通に分けとけよ

330:デフォルトの名無しさん
17/10/30 03:59:29.97 XQpDzkmg0.net
>323
できないところってどんなところ? C#にできてC++にできないなんてどういうことか意味わからん。
cls::とか邪魔くさい。悪しき慣習だろ。あまりにばかげてるからC#では止めにしただけでしょ。

331:デフォルトの名無しさん
17/10/30 05:31:15.27 shFErbol0.net
>>323
一部だけ分けりゃいいじゃん
それとシングルソースにしちまうと分担がしにくいだろ

332:デフォルトの名無しさん
17/10/30 09:03:26.26 d9bwD/eVM.net
>>327
ヘッダとソースを分けないでって意味でシングルソースってことではないと思うぞ

333:はちみつ餃子
17/10/30 10:19:54.36 /9ncNuq00.net
モジュールについては検討中みたいだからそのうち仕様に入るんじゃね?
コンセプト並みのビッグトピックだからどんどん後ろ倒しされそうな気もするけど。

334:デフォルトの名無しさん
17/10/30 22:49:10.56 ao9CiOaa0.net
vector<shared_ptr<T>>を使う場合、
shared_ptrから自分自身のvector上のindexを取得するにはvector要素を1つずつ走査していくしかないんかね?
vector[0]のアドレスをうまく引き算すればうまくいくかと思いきや、
shared_ptr自体は同じアドレスを持つインスタンスがvectorに格納されているわけでないのでうまく行かんのです

335:デフォルトの名無しさん
17/10/30 23:15:50.92 GaTL14js0.net
>>330
基本的には無理。
何らかの基準でソート状態を保たせていれば、バイナリサーチ系の処理(lower_boundとか)が使えるので、必ずしも一個づつチェックする必要は無い。

336:デフォルトの名無しさん
17/10/31 01:31:02.70 Bb7HxcAo0.net
もしindexが変わらんのであれば別にmap<shared_ptr<T>, int>持つとか
Tにindex持たせるとか

337:デフォルトの名無しさん
17/10/31 06:49:36.25 /ULkeF1E0.net
cppで作ったライブラリ(.a)をcに取り込むときって何か注意いる?
cppには公開apiを1つ用意して、そのなかでクラスを作って計算させようとしてる

338:デフォルトの名無しさん
17/10/31 08:34:02.64 tApLOrdW0.net
>>333
その公開apiをextern "C"するのを忘れない事。

339:はちみつ餃子
17/10/31 09:33:49.44 54GXLgHP0.net
extern "C" しとかないと大抵はリンクの段階で失敗してくれるから、そんなにおかしなことにもならないだろうけどね。
あとは C++ 側で作ったライブラリから例外が送出されると C 側を通過できなくてクラッシュする環境がある。

340:デフォルトの名無しさん
17/10/31 11:08:02.92 B8ReYjkr0.net
>>300
やり方しだいジャネーノ?C++推奨しないが、スタックが~ ramが~っていうなら自分で管理するか、newに任せるにして実験すればいいんじゃね?
#include <stdio.h>
#include <string.h>
char buf_hige[1000];
class Hoge {
private: char *m_pBuf; int m_size, m_IsNew;
public:
Hoge(char *p, int s) { m_size = s; m_pBuf = p; m_IsNew = 0; }
Hoge() : m_size(100) { m_pBuf = new char[m_size]; m_IsNew = 1; }
~Hoge() { if (m_IsNew) { delete[]m_pBuf; printf("~Hoge()自動削除\n"); } else printf("~Hoge()\n"); }
void zero() { memset(m_pBuf, 0, m_size); }
void show() { printf("アドレス %p size %d\n", m_pBuf, m_size); }
};
void main() {
char buf_hoge[200];
Hoge a(buf_hige, sizeof(buf_hige));// 自分でメモリー割り当ててクラスを使う 普通は ram.. #pragmaとかで移動できる?
Hoge b(buf_hoge, sizeof(buf_hoge));// 自分でメモリー割り当ててクラスを使う mainのstack
Hoge c;// 内部でnew/deleteして動的に使う ram
a.zero(); b.zero(); c.zero(); a.show(); b.show(); c.show();
}

341:デフォルトの名無しさん
17/10/31 14:04:56.90 QkT+8axj0.net
普通の opereter new 定義するだけじゃ駄目なの?

342:デフォルトの名無しさん
17/10/31 15:27:26.38 ivXWtcCM0.net
その例なら m_pBuf とか m_size とか m_isNew がどこに置かれるかって話してるんだよ

343:はちみつ餃子
17/10/31 15:50:52.40 54GXLgHP0.net
>>300
リンカスクリプトで定義できるんじゃねーの

344:デフォルトの名無しさん
17/10/31 20:31:59.83 cRyJj2TVM.net
>>331
>>332
返信thx
やっぱむりかー。index持たせる方向で検討します

345:デフォルトの名無しさん
17/11/01 09:45:22.08 Rrk0WseL0.net
>>338
リンカーでMAP指定して確認したらいいんじゃねーの?アドレスわかるだろ?

346:デフォルトの名無しさん
17/11/01 23:49:32.94 KV/dR0JW0.net
共用体って使い道あるの?
素人目からしたら役に立つようには到底思えない

347:はちみつ餃子
17/11/02 00:33:40.96 4tfXXWiS0.net
使わずに済むならそれにこしたことはないだろうけど、
部分的に動的型みたいにしたいときは有るよ。
yacc が生成するコードに出てきたりする。

348:デフォルトの名無しさん
17/11/02 01:14:44.84 6O09mL2X0.net
>>342
例えば通信パケットとかで必ず固定長だけど、複数の箇所のコマンドとか意味とかのコードで
内容がコロコロ変わる様な時は便利かも知れない?
それぞれの構造体にキャストしろよって言いたくもなるけど、
複数の人で開発してると通信パケットの内容とかで下らない不具合出したくないから
1つのヘッダで全部規定したりって事はあったな

349:デフォルトの名無しさん
17/11/02 01:35:58.84 6O09mL2X0.net
あ、後H8開発してた時とか、メモリマップドIOとかがモードでコロコロ意味変わる時、
1バイトのデータになったりビットフィールドになったりなとことかがunionになってた

350:デフォルトの名無しさん
17/11/02 04:56:03.82 i8MAyZKO0.net
union RGBA{
struct {R:5,G:5,B:5,A:1};
std::uint16_t Colors;
};
こんな感じのことするけど。たまに。

351:デフォルトの名無しさん
17/11/02 04:57:25.31 i8MAyZKO0.net
あ、片宣言抜けてた。
たまにしか使わないからなぁ。
struct {std::uint16_t R:5,G:5,B:5,A:1};

352:デフォルトの名無しさん
17/11/02 09:40:30.47 N8nuZaLN0.net
union { double d; int i; char c;} u;
は1番大きな要素、この場合は double d のサイズと
メモリアライメントを持つというのが union の重要な機能
これのおかげで非ワード境界からワードを読もうとするようなコードを避けられる

353:デフォルトの名無しさん
17/11/02 21:55:55.26 JP+uyw1T0.net
#pragma data_seg
でdllの共有領域を作ってるんですけど
ここにクラスのインスタンスを置いておくことはできますか?

354:デフォルトの名無しさん
17/11/02 22:11:01.00 e7UKjGN4F.net
コンストラクタのない、構造体にメンバ関数付いただけのクラスのインスタンスなら大丈夫じゃないかな。
動的にメモリをアロケーションするクラスではアロケーションしたメモリは共有されないので注意。

355:デフォルトの名無しさん
17/11/02 22:11:46.90 m+SMCXhed.net

共有されないってのは「プロセス間で」ということね

356:デフォルトの名無しさん
17/11/02 23:18:08.17 H/ANuUhm0.net
>>348
『プログラミング言語C』のmalloc()の実装例のやつで見た

357:デフォルトの名無しさん
17/11/03 00:39:07.86 Xm/a3Zyv0.net
共用体は、パリティチェックで使う
あるサイズの内容を、ある方法で計算して、データが破壊・改変されていないか。
通信データが正しいかどうか

358:デフォルトの名無しさん
17/11/03 01:31:20.38 f3hy7vD8M.net
>>349
確保済みのメモリブロックに対してのobject new 演算子ってのが
あるはず

359:デフォルトの名無しさん
17/11/03 07:14:49.06 3SB+84d60.net
境界調整はalignasでできるようになった

360:デフォルトの名無しさん
17/11/03 18:27:07.09 6x/Gce9W0.net
string::format()マダァー?
<<は失敗だったって早く認めようぜ

361:デフォルトの名無しさん
17/11/03 21:32:49.68 A4m/loi/0.net
printf()系関数とstring::c_str()(ていうかbasic_string<T>::c_str())があるから無問題

362:デフォルトの名無しさん
17/11/03 21:34:26.06 A4m/loi/0.net
入力はscanf()系とか使うとCの経験が長いプログラマーには軽蔑の眼差しで見られるが
cinとかより速くて使い勝手も良いのだから仕方が無い

363:デフォルトの名無しさん
17/11/03 21:46:14.60 +rn5t+yk0.net
boost::format よく使ってる

364:デフォルトの名無しさん
17/11/03 23:08:11.68 veVAWEWL0.net
可変テンプレート使えるんならprintfにクラス喰わせたりすることぐらいできるだろ

365:デフォルトの名無しさん
17/11/04 00:02:18.18 9Iye7uTf0.net
snprintfじゃstringstreamの代わりとしては役者不足だろ

366:デフォルトの名無しさん
17/11/04 07:27:21.97 CbR/PKzh0.net
「役者不足」は造語なんで使わないほうが無難

367:デフォルトの名無しさん
17/11/04 09:25:02.17 v7stxdd6M.net
>>362
しかも「役不足」じゃあ、「役より実力が遥かに高い」の意味だしね。

368:デフォルトの名無しさん
17/11/04 12:54:53.20 z55RyEJo0.net
「力不足」な

369:デフォルトの名無しさん
17/11/04 14:09:16.93 CaxSQdEs0.net
>>361
全然wwwwwwwwwww
自作クラスのシリアライズ/デシリアライズの下請け関数として使う分には
機能上全く困らない上に速いのだから
で、シリアライズ/デシリアライズおあ
void ISeriarizable::seriarize(FILE* fp)とvoid ISeriarizable::deseriarize(FILE* fp)
にして「<<」や「>>」のオーバーロードみたいな変態じみたことはせずに同等の柔軟性を確保できる
  

370:デフォルトの名無しさん
17/11/04 14:29:00.75 +71Y93dj0.net
設計が古いな。

371:デフォルトの名無しさん
17/11/04 15:30:32.32 2OIo1NJb0.net
cin,cout って組み込みで使えるんかい?
何処をどう書き換えるとそうなるん?

372:デフォルトの名無しさん
17/11/04 15:34:07.08 2OIo1NJb0.net
string s1("foo");
const char *p = NULL;
p = s1.c_str();
cout << p << endl;
return 0;
????
cout << s1<<endl; じゃダメなん?

373:デフォルトの名無しさん
17/11/04 22:22:05.63 2OIo1NJb0.net
Coutを実験してみたがコードがバカでかくなるので駄目だな。組み込みでは使えない。

374:デフォルトの名無しさん
17/11/04 22:34:50.04 WXoZTt/lM.net
>>369
組み込みで何をやりたいのか知らんけど普通coutを書き換えるだろ

375:デフォルトの名無しさん
17/11/04 22:37:40.26 z55RyEJo0.net
組み込みに使うなら実験とかじゃなくちゃんとどんなコードか把握しろよw怖いわ

376:デフォルトの名無しさん
17/11/04 22:57:54.30 GShvEvWZ0.net
そもそも組み込みの標準入出力がどんなもんなのかすら想像できないw

377:デフォルトの名無しさん
17/11/04 23:37:09.27 wPtyVAZ40.net
組み込みでは使えないなんていう次元ならそもそも標準ライブラリ使わないだろ

378:デフォルトの名無しさん
17/11/05 00:56:53.05 1GSqUY/t0.net
デバッグ担当「なぁ?なんかログにアホとかハゲとかあるんだけどナニコレ?オレの事おちょくってんじゃねーだろうなぁ?!あ!!!!」

379:デフォルトの名無しさん
17/11/05 05:24:49.90 qHZ+DCMx0.net
streamの変更ムズいんだけど。
入力だとstreambufのunderflow実装すると思うけど、エラー発生したときどうやってistreamに通知すんの?

380:デフォルトの名無しさん
17/11/05 06:18:13.15 vRj0Z3ir0.net
struct lock_interrupt {
 lock_interrupt() : masked(get_imask_ccr()) { 
set_imask_ccr(1); 
 }
 ~lock_interrupt() { 
set_imask_ccr(masked); 
 }
 bool masked;
};
 // in some function... 
 lock_interrupt lk; 
 // do critical action, lets forget unmask interrupt flag!
} 

このコード lock_interrupt() : masked(get_imask_ccr()) { 
ここの部分の”:”ってどういう意味なの?
何となくコンストラクタとディストラクタがせっとになってるだろうなー
だから”}”に出会うと自動的にディストラクトされるコードだろうか?
ってくらいしかわからないレベルだから、、、、是非ともこのコードを
使い倒してみたい。

381:デフォルトの名無しさん
17/11/05 06:23:01.44 U5vPVsbz0.net
メンバイニシャライザでググれ
てか初等文法くらい勉強しろよ

382:デフォルトの名無しさん
17/11/05 06:27:09.42 vRj0Z3ir0.net
>組み込みで何をやりたいのか知らんけど普通coutを書き換えるだろ
ん?
普通はcoutを使わないという意味だろうか? それなら同意する。
#include <iostream>
を追加しただけで256kbyteを超えてしまう。これではマイコンじゃ使えないな。
もちろんcoutが使えないって意味だよ。使えないなら書き換える? まあそれは
むりだな。なぜなら書き換える場合でもiostramをインクルードするひつようがあるからね。
つまり書き換えなんてできない。つまり使えないし使わない。すなわち結論としては
Cのsprintfを使うってのが順当かと思う。

383:デフォルトの名無しさん
17/11/05 06:30:56.15 U5vPVsbz0.net
>>376
あとついでにクラス全体を説明すると、コンストラクタで割り込みをマスクして
デストラクタで元に戻している。
こんな感じで使う
void foo () {
lock_intterupt lock; // 以下割り込み禁止
if (...) {
....
return;
}
.....
return;
}
割り込み禁止を解除するコードを書き忘れたり複数書いたりせずに済む。

384:デフォルトの名無しさん
17/11/05 06:35:39.18 vRj0Z3ir0.net
>メンバイニシャライザでググれ
キーワードありがとう。
ググってみた。メンバーイニシャライザってことはわかったんだがなんか特殊だな
masked = get_imask_ccr();
こういうことか? なるほど。

385:デフォルトの名無しさん
17/11/05 07:06:11.45 vRj0Z3ir0.net
ここでlockという名称は何でもいいんですよね。要するにstructを生成するだけだから。
2か所でlockしたいような場合には使えないという欠点があるね。
void foo() { 
  lock_intterupt lock; // 以下割り込み禁止 
  if (...) { 
     .... 
     return; 
  } 
  lock.unlock();
..... 
  ..... 
  ..... 
  lock.relock(); // ここでも割り込み禁止 
  if (...) { 
     .... 
     return; 
  } 
  ..... 
  return;        // ここでlock(割り込み禁止)した部分が解除される。 
} 
こうするにはどうしたらいい?

386:デフォルトの名無しさん
17/11/05 07:09:12.73 vRj0Z3ir0.net
なんでclassにしないでstructなのだろうか?

387:デフォルトの名無しさん
17/11/05 07:26:22.28 vRj0Z3ir0.net
C++の本見るとcout,cinの例が必ず出ているが、これは大きな間違いだな。なぜなら
1.マイコンではiostremは馬鹿でかくて使えない。だからcout,cinは使えない。
2.じゃあパソコンで使うのかというと、パソコンならjavaかC#があるのにC++なんて
使うのは間違い。
以上の理由からサンプルにcout使うのは馬鹿。

388:デフォルトの名無しさん
17/11/05 07:28:47.99 vRj0Z3ir0.net
というか、もっとmiimaizeしたiostream実装しろよな。といいたい。

389:デフォルトの名無しさん
17/11/05 08:04:41.58 3uuR82Hq0.net
>>381
> 2か所でlockしたいような場合には使えないという欠点があるね。
ブロックも知らんのかよ...
void foo(){
 {
  lock_intterupt lock; // 以下割り込み禁止 
  if(...){
   ...
   return;
  } 
 }
 ...
 ...
 {
  lock_interrupt lock; // ここでも割り込み禁止
  if(...){
   ...
   return;
  } 
 }
 return; // ここでlock(割り込み禁止)した部分が解除される。
}

390:デフォルトの名無しさん
17/11/05 09:19:24.45 fHP76uUy0.net
メンバーイニシャライザーなんて上級者向け

391:デフォルトの名無しさん
17/11/05 09:44:11.28 vRj0Z3ir0.net
>>ブロックも知らんのかよ...
そういうのがあったのか。 ブロックってスコープだけの問題ではないんだ。
スコープ外れるとディストラクトされるんだ。
いがいと使えるなー。

392:デフォルトの名無しさん
17/11/05 09:47:03.86 vRj0Z3ir0.net
>メンバーイニシャライザーなんて上級者向け
イニシャルなんて基本中の基本なのに、上級者でしか使えないほど分かりづらい構造になっている。
素直に=をつかったらいいのにな。

393:デフォルトの名無しさん
17/11/05 09:49:48.35 vRj0Z3ir0.net
 lock_interrupt(){ 
  masked = get_imask_ccr();
  set_imask_ccr(1); 
 }
これでいいじゃん。

394:デフォルトの名無しさん
17/11/05 10:01:45.17 U5vPVsbz0.net
物知らず自慢されても周りの人は当惑するだけですよ。
メンバーイニシャライザが何故必要なのかはメンバーイニシャライザでググってください。

395:デフォルトの名無しさん
17/11/05 10:06:52.16 +AqtjiW/0.net
自虐ネタですかね?

396:デフォルトの名無しさん
17/11/05 10:08:40.02 t3ZH1B/20.net
このスレ和むね

397:デフォルトの名無しさん
17/11/05 10:23:28.34 vRj0Z3ir0.net
メンバーイニシャライザでググると
メリット1:const指定のメンバ変数の初期化ができる
メリット2:メンバイニシャライザの方が効率的
メリット3:クラスを継承する場合は、メンバイニシャライザに基底クラスのコンストラクタを記述します。
メリット4:メンバイニシャライザを使えるようになると、プログラミングが上手になったような気分になれます。
とあるが、
1はあまり意味がない。constを初期化しないで使うケースは皆無。
2は理由が不明。わかり難いし、効率が変わる理由がない。効率を変えることができるなら、コンストラクタの効率も上げればいいだけだ。
3も意味不明だ。基底クラスのコンストラクタをイニシャライザに記入する必要性がないと思うが、出来ないのか? この方法でしか
できないのならそれはデメリットというのが正しい日本語だ。
4はこれが最大のメリットだろうな。

398:デフォルトの名無しさん
17/11/05 10:28:17.46 vRj0Z3ir0.net
結論
 テクを自慢したい人以外はメンバーイニシャライザは使うべきではない。

399:デフォルトの名無しさん
17/11/05 10:30:41.33 qHZ+DCMx0.net
>>393
代入するまでそれがどういう状態になるのか考えた?

400:デフォルトの名無しさん
17/11/05 10:31:58.48 GarpakNhr.net
>>393の文才に嫉妬

401:デフォルトの名無しさん
17/11/05 10:33:41.73 PHl2cqXG0.net
上級者すげー

402:デフォルトの名無しさん
17/11/05 10:38:30.72 vRj0Z3ir0.net
>代入するまでそれがどういう状態になるのか考えた?
ん? constとは定数ですよ。代入なんてありえません。設定です。コンパイラーがシコシコ考えて設定済みです。
プログラムが走る時には最初から決まってるもの、最初を決めるのに別にイニシャライザで
やろうが、コンストラクタでやろうが関係ないです。はい。
ちがった?

403:デフォルトの名無しさん
17/11/05 10:42:52.94 qHZ+DCMx0.net
>>398
うん。君はC++使わない方がいいね。

404:デフォルトの名無しさん
17/11/05 10:44:47.64 tNj/Rw6Vd.net
c#とかのconstと勘違いしてない?

405:デフォルトの名無しさん
17/11/05 10:51:53.00 bjKo+Lyid.net
初期化と代入の違い
constとコンパイル時定数の違い

406:デフォルトの名無しさん
17/11/05 10:52:44.25 W+ILxFMJ0.net
>>398
適当にググって済ますんじゃなくて真っ当なc++本を一通り読んでから帰ってこい。
あと組み込みを前提に考えるのもやめとけ。

407:デフォルトの名無しさん
17/11/05 11:05:07.65 3uuR82Hq0.net
>>398
> constとは定数ですよ。
残念ながら違う
class c {
private:
 const int n;
public:
 c(const int x): n(x){}
 ...
}
なんてことができる


次ページ
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch