エスケープシーケンスやWin32APIなどの環境依存なものもOK
そのような質問は必ず環境を書きましょう
半角空白やタブでのインデントはスレに貼ると無くなります
コードを貼れる所
http://codepad.org/
https://ideone.com/
前スレ
【初心者歓迎】C/C++室 Ver.102【環境依存OK】
http://mevius.5ch.net/test/read.cgi/tech/1509780815/
探検
【初心者歓迎】C/C++室 Ver.103【環境依存OK】
レス数が900を超えています。1000を超えると表示できなくなるよ。
2018/07/01(日) 03:44:53.53ID:4MMF8cDN
816デフォルトの名無しさん
2018/11/14(水) 11:29:46.12ID:Hh1ptiAj 設計者の意図が伝わりやすいのは前者
817デフォルトの名無しさん
2018/11/14(水) 11:45:30.11ID:ND9bKuyE int a=1;
if(!hoge){
a=2;
}
のa=1は通常の代入じゃないからね。
これは基準値で初期化しんだからよ。
こっちのが効率は良いよ。
if(!hoge){
a=2;
}
のa=1は通常の代入じゃないからね。
これは基準値で初期化しんだからよ。
こっちのが効率は良いよ。
818デフォルトの名無しさん
2018/11/14(水) 11:49:18.98ID:484vhzMZ int a = hoge? 1 : 2;
はどう?
はどう?
819デフォルトの名無しさん
2018/11/14(水) 12:07:57.04ID:XWwMTSMS 多分タイポでa,bの値を条件によって入れ替える処理だと思うぞ。
820デフォルトの名無しさん
2018/11/14(水) 12:08:42.29ID:zVp4oIsl int a = 1 * (!hoge) + 2 * (!!hoge);
線型代数
線型代数
821デフォルトの名無しさん
2018/11/14(水) 12:58:55.38ID:4JKzq5B5 >>817
機械語に直したらどっちもmovでしょ
機械語に直したらどっちもmovでしょ
822デフォルトの名無しさん
2018/11/14(水) 13:41:43.62ID:B+lK3N2V >>815
どういう最適化?
初期化されても参照される前に代入が起こる可能性があるから
hoge の判定の後まで初期化を遅延させる、つまり実質 else を使ったのと
同じコードが生成されるということかな?
そこまで出来そうな気もしなかったのだけど
どういう最適化?
初期化されても参照される前に代入が起こる可能性があるから
hoge の判定の後まで初期化を遅延させる、つまり実質 else を使ったのと
同じコードが生成されるということかな?
そこまで出来そうな気もしなかったのだけど
823デフォルトの名無しさん
2018/11/14(水) 15:05:08.52ID:sW4kyFkZ 初期値として意味があるなら後者でいい気はするが
なんか例が微妙というか、プログラムの流れがなんか不自然
なんか例が微妙というか、プログラムの流れがなんか不自然
824デフォルトの名無しさん
2018/11/14(水) 15:14:44.43ID:XWwMTSMS だよね。
だからやっぱタイプミス(タイポ)で条件によってa,bを入れ替える/入れ替えないを切り替える処理と見た方が自然。
だからやっぱタイプミス(タイポ)で条件によってa,bを入れ替える/入れ替えないを切り替える処理と見た方が自然。
825デフォルトの名無しさん
2018/11/14(水) 20:24:55.58ID:PBXirj6B >>822
797の後者のコードがLLVM IR 2命令に最適化される
%2 = select i1 %0, i32 1, i32 2
%3 = select i1 %0, i32 2, i32 1
%0がhoge、%2がa、%3がbにあたる
797の後者のコードがLLVM IR 2命令に最適化される
%2 = select i1 %0, i32 1, i32 2
%3 = select i1 %0, i32 2, i32 1
%0がhoge、%2がa、%3がbにあたる
826デフォルトの名無しさん
2018/11/14(水) 21:42:49.91ID:1o5yT6ol >>825
ありがとう。なるほど、すばらしい
これをまんまC/C++に書き戻すと
int a = hoge ? 1 : 2;
int b = hoge ? 2 : 1;
ということかな
でもこれだとhoge を2回チェックしてるので却って非効率な気もするけど
まぁ LLVM はまだ中間形式だから、これをターゲットコードに落とすところで
hoge の判定を一回で済ませるようにさらに最適化するのは簡単そうではあるね
ありがとう。なるほど、すばらしい
これをまんまC/C++に書き戻すと
int a = hoge ? 1 : 2;
int b = hoge ? 2 : 1;
ということかな
でもこれだとhoge を2回チェックしてるので却って非効率な気もするけど
まぁ LLVM はまだ中間形式だから、これをターゲットコードに落とすところで
hoge の判定を一回で済ませるようにさらに最適化するのは簡単そうではあるね
827デフォルトの名無しさん
2018/11/14(水) 21:44:23.61ID:1o5yT6ol とは言え C/C++は効率ファーストな言語なんで、最適化を当てにして
ユルいコードでOK、てのも如何なものかという気はする
最適化は所詮、処理系依存だし
まぁ >>823 の言うように、その値で初期化することに強い意味があるなら
その書き方を優先する、そういうトレードオフがあることは認めるけど
ユルいコードでOK、てのも如何なものかという気はする
最適化は所詮、処理系依存だし
まぁ >>823 の言うように、その値で初期化することに強い意味があるなら
その書き方を優先する、そういうトレードオフがあることは認めるけど
828デフォルトの名無しさん
2018/11/15(木) 08:33:27.40ID:4fKxVed7 そんな細かい最適化は困ってから気にすればいい
829デフォルトの名無しさん
2018/11/15(木) 08:49:34.01ID:s3tKWUx8 後から見て意図がわかるならドッチでもいいや
830デフォルトの名無しさん
2018/11/15(木) 09:03:11.75ID:Y+nNeoCF hoge ? a = 1, b = 2 : a = 2, b = 1;
ができればな
ができればな
831デフォルトの名無しさん
2018/11/15(木) 09:06:57.93ID:1bc0l4Fz >>830
カッコつけて試せ
カッコつけて試せ
832デフォルトの名無しさん
2018/11/15(木) 09:08:20.15ID:Y+nNeoCF カッコつけてもカッコ悪いからやめとくわ
833デフォルトの名無しさん
2018/11/15(木) 16:41:41.66ID:APQKN+QS >>829
もちろん原則論に過ぎないよ
あと、原則論と言えば「変数は定義時点で必ず初期化せよ」というのもあるわけで
初期化忘れを防ぐためにそういうコーディングルールを設けている所も多いはず
その場合は後者の方が望ましいことになる
初心者はむしろ効率より堅牢性を重視した方がいいかもね
もちろん原則論に過ぎないよ
あと、原則論と言えば「変数は定義時点で必ず初期化せよ」というのもあるわけで
初期化忘れを防ぐためにそういうコーディングルールを設けている所も多いはず
その場合は後者の方が望ましいことになる
初心者はむしろ効率より堅牢性を重視した方がいいかもね
834デフォルトの名無しさん
2018/11/15(木) 18:14:33.63ID:/yCJioVE >>830-831
副作用でるやつ
副作用でるやつ
835デフォルトの名無しさん
2018/11/15(木) 22:00:21.20ID:cIF0PQeg inline void debug_pulse(int no){
#if(DEBUG == 1)
switch(mode){
case 0: pulse(A0); break;
case 1: pulse(A1); break;
case 2: pulse(C5); break;
case 3: pulse(F0); break;
}
#endif
}
1.この場合 debug_pulse(3);は pulse(F0)と同じになる。
2. #define DEBUG 0 にすると全て跡形もなく消える。
1,2は正しい?
#if(DEBUG == 1)
switch(mode){
case 0: pulse(A0); break;
case 1: pulse(A1); break;
case 2: pulse(C5); break;
case 3: pulse(F0); break;
}
#endif
}
1.この場合 debug_pulse(3);は pulse(F0)と同じになる。
2. #define DEBUG 0 にすると全て跡形もなく消える。
1,2は正しい?
836さまよえる蟻人間 ◆T6xkBnTXz7B0
2018/11/15(木) 22:04:26.81ID:OQAYkFCC 1.は正しい。
2.この世の全てが無くなるとは思えない。質問が不適切。
2.この世の全てが無くなるとは思えない。質問が不適切。
837デフォルトの名無しさん
2018/11/15(木) 22:09:23.82ID:4a2YDbgY DEBUG == 1のときコンパイル通らないぞ
838さまよえる蟻人間 ◆T6xkBnTXz7B0
2018/11/15(木) 22:24:43.20ID:OQAYkFCC 駄々しくなかった
839デフォルトの名無しさん
2018/11/15(木) 22:52:52.91ID:TZnKsh0H 関数の外で適切な定義がされてれば通る
840さまよえる蟻人間 ◆T6xkBnTXz7B0
2018/11/15(木) 23:14:39.58ID:OQAYkFCC こんな感じで私は馬鹿です。
841デフォルトの名無しさん
2018/11/16(金) 05:03:45.34ID:qDPFPFK+ >2.この世の全てが無くなるとは思えない。質問が不適切。
質問の意図は
inline void debug_pulse(int no){ }はコードを生成しない。これは正しいか?
である。
質問の理解が不適切。
質問の意図は
inline void debug_pulse(int no){ }はコードを生成しない。これは正しいか?
である。
質問の理解が不適切。
842デフォルトの名無しさん
2018/11/16(金) 07:42:29.36ID:PBHgKXBb >>841
エラーになるのでコードは生成されません
エラーになるのでコードは生成されません
843デフォルトの名無しさん
2018/11/16(金) 08:49:40.86ID:U1UWmjZG mode の出所は? A)no の typo B)別途関数の外に居るし
844デフォルトの名無しさん
2018/11/16(金) 19:06:25.10ID:4cszXKPK int mode;
void pulse(void);
int A0;
int A1;
int C5;
int F0;
void pulse(void);
int A0;
int A1;
int C5;
int F0;
845デフォルトの名無しさん
2018/11/17(土) 10:49:41.98ID:B4GISbTr modeがどうかは質問の趣旨と関係ないのでどうでもいいが(modeがglobalとか適当に)
inline void debug_pulse(int no){
switch(mode){
case 0: pulse(A0); break;
case 1: pulse(A1); break;
case 2: pulse(C5); break;
case 3: pulse(F0); break;
}
}
か
inline void debug_pulse(int no){
}
か
にしかならないから
1.は「ならない」
2.は「消える」
inline void debug_pulse(int no){
switch(mode){
case 0: pulse(A0); break;
case 1: pulse(A1); break;
case 2: pulse(C5); break;
case 3: pulse(F0); break;
}
}
か
inline void debug_pulse(int no){
}
か
にしかならないから
1.は「ならない」
2.は「消える」
846デフォルトの名無しさん
2018/11/17(土) 10:50:51.46ID:B4GISbTr ああ 2. で消える条件は
debug_pulse() を呼んでる部分が無いことが前提だから
2. 「消える」「消えない」どっちとも言えない
だな
debug_pulse() を呼んでる部分が無いことが前提だから
2. 「消える」「消えない」どっちとも言えない
だな
847デフォルトの名無しさん
2018/11/17(土) 12:25:27.92ID:OvrLhogI >>846
inlineなんで、消えるか消えないかはアドレス必要な操作をしてるかどうか
inlineなんで、消えるか消えないかはアドレス必要な操作をしてるかどうか
848デフォルトの名無しさん
2018/11/17(土) 13:20:26.13ID:yMNF1uQT inlineをどう扱うかなんてコンパイラ次第
どんなコードが吐かれるかが知りたければ
吐かれたコードを見るのが一番
どんなコードが吐かれるかが知りたければ
吐かれたコードを見るのが一番
849デフォルトの名無しさん
2018/11/17(土) 22:18:09.47ID:PyYM1CbT inline void debug_pulse(int no){
#if(DEBUG == 1)
switch(no){
case 0: pulse(0xA0); break;
case 1: pulse(0xA1); break;
case 2: pulse(0xC5); break;
case 3: pulse(0xF0); break;
}
#endif
}
1.この場合 debug_pulse(3);は pulse(0xF0)と同じになる。
2. #define DEBUG 0 にすると全て跡形もなく消える。
1,2は共に正しい?
#if(DEBUG == 1)
switch(no){
case 0: pulse(0xA0); break;
case 1: pulse(0xA1); break;
case 2: pulse(0xC5); break;
case 3: pulse(0xF0); break;
}
#endif
}
1.この場合 debug_pulse(3);は pulse(0xF0)と同じになる。
2. #define DEBUG 0 にすると全て跡形もなく消える。
1,2は共に正しい?
850デフォルトの名無しさん
2018/11/17(土) 22:20:38.34ID:/DEd7oJ8 そもそもpulseがなんなのかわからんから
なにが書いてあるのか意味不明
なにが書いてあるのか意味不明
851デフォルトの名無しさん
2018/11/17(土) 23:02:18.32ID:cQE6WwU+ コンパイラのオプション指定は?
852デフォルトの名無しさん
2018/11/18(日) 03:24:10.19ID:P3SzQi6N 次スレからは、
【初心者歓迎】C/C++室 Ver.103【環境依存OK】 を、
【上級者用】C/C++室 Ver.104【環境依存OK】
にした方がいいな。
【初心者歓迎】C/C++室 Ver.103【環境依存OK】 を、
【上級者用】C/C++室 Ver.104【環境依存OK】
にした方がいいな。
853デフォルトの名無しさん
2018/11/18(日) 11:25:26.97ID:sRdnUsGm 何で相談室の方行かないんだろう
854デフォルトの名無しさん
2018/11/18(日) 13:06:07.95ID:OtDWWVpG856デフォルトの名無しさん
2018/11/18(日) 14:47:27.03ID:SB4p/OrB 本人の主観で良いでしょう
859デフォルトの名無しさん
2018/11/18(日) 19:08:07.14ID:P3SzQi6N くだらないないことを、グダグダ突っかかり続けるのが、5ch民のクセ。
861デフォルトの名無しさん
2018/11/18(日) 19:23:01.28ID:SB4p/OrB 何がしたいんだ?煽りたいのか?
862デフォルトの名無しさん
2018/11/18(日) 21:29:53.81ID:NspDNQEU >>852が初心者向けの回答すればそれで解決だろ。アホ草
863デフォルトの名無しさん
2018/11/18(日) 21:35:53.00ID:2nMU53A+ そもそも論言っていい?w
なんで初心者でも上級者でも質問したらきちんと回答してくれるこのスレがあるのに、自分が気に入らないからって勝手に新スレ作るの?
そういうのを躊躇なくやれちゃう人が本当に怖い・・・
なんで初心者でも上級者でも質問したらきちんと回答してくれるこのスレがあるのに、自分が気に入らないからって勝手に新スレ作るの?
そういうのを躊躇なくやれちゃう人が本当に怖い・・・
864デフォルトの名無しさん
2018/11/18(日) 21:41:35.59ID:SB4p/OrB 議論したいなら、自治スレに移動してやってくれ
865デフォルトの名無しさん
2018/11/18(日) 22:07:32.02ID:sRdnUsGm867デフォルトの名無しさん
2018/11/18(日) 23:53:08.38ID:P3SzQi6N 今までの、他者排除姿勢から、よくも>>866が書けたもんだ。
868デフォルトの名無しさん
2018/11/19(月) 00:02:10.47ID:FLKvqXWs 他者排除だって?誰が?QZが?
被害妄想激しすぎるんじゃないか?
被害妄想激しすぎるんじゃないか?
870デフォルトの名無しさん
2018/11/19(月) 00:33:46.22ID:w+8SUjt5 他所でやれよ(排他主義)
871デフォルトの名無しさん
2018/11/19(月) 00:38:17.03ID:on7lyeKV 荒らし始めたとき
872デフォルトの名無しさん
2018/11/19(月) 01:30:18.22ID:EqyITMeu ひどい虫歯な排他主義の人
「歯ぁ、痛過ぎぃ〜」
「歯ぁ、痛過ぎぃ〜」
873デフォルトの名無しさん
2018/11/19(月) 02:44:50.38ID:57YOX4Aq 日本人じゃないんだろこいつ
在だな
在だな
874デフォルトの名無しさん
2018/11/19(月) 15:26:04.17ID:3MOWhUti #include <stdio.h>
int main() {
float f = 262143.98;
fprintf(stdout, "%f\n", f);
f += 0.01f;
fprintf(stdout, "%f\n", f);
f += 0.01f;
fprintf(stdout, "%f\n", f);
f += 0.01f;
fprintf(stdout, "%f\n", f);
return 0;
}
// why 厚切り json
int main() {
float f = 262143.98;
fprintf(stdout, "%f\n", f);
f += 0.01f;
fprintf(stdout, "%f\n", f);
f += 0.01f;
fprintf(stdout, "%f\n", f);
f += 0.01f;
fprintf(stdout, "%f\n", f);
return 0;
}
// why 厚切り json
875デフォルトの名無しさん
2018/11/19(月) 15:38:13.37ID:on7lyeKV floatって有効桁数は6桁じゃなかった?
876デフォルトの名無しさん
2018/11/19(月) 15:40:16.18ID:oi0OLObs オーバーフローじゃなくて
マシンイプシロンの問題
マシンイプシロンの問題
877デフォルトの名無しさん
2018/11/19(月) 20:50:54.90ID:8P0ZFwQc878デフォルトの名無しさん
2018/11/19(月) 22:43:09.35ID:dp3XdjsI 様々な処理系依存についてそれぞれ具体的に何に依存してるのかってどこで調べられますか?
ソフトを作って配布するにあたって、ユーザーの環境をwindows7以降のPCに限定するとして
ユーザー側の環境に依存するもの
ユーザー側の環境に依存するがwin7以降のPCでは共通なので実質非依存とみなせるもの
コンパイル側の環境に依存するのでコンパイルしてしまえば非依存とみなせるもの
に分けて調べたいです
ソフトを作って配布するにあたって、ユーザーの環境をwindows7以降のPCに限定するとして
ユーザー側の環境に依存するもの
ユーザー側の環境に依存するがwin7以降のPCでは共通なので実質非依存とみなせるもの
コンパイル側の環境に依存するのでコンパイルしてしまえば非依存とみなせるもの
に分けて調べたいです
879デフォルトの名無しさん
2018/11/19(月) 22:57:04.59ID:EqyITMeu >>878
MSDN
MSDN
880デフォルトの名無しさん
2018/11/20(火) 06:11:07.08ID:N6+XqoZ1 >>878
まとめて書いてある所なんか無いよ
普通はコンパイラの範疇なものは実行環境に依存しない
一緒に提供しない外部のコードを使う部分(DLL, API, ドライバ)は依存する
と思っておけば良いけど
環境を判断して動作を変えるコードもあるし
実行速度は当然環境に依存する
特定の環境の場合にタイミング依存で発生する問題もある
確実に実行環境に依存しないなんて確証を得られるコードなんてごく限られた範囲になるんで
そんなものに頼らず
出来るだけより多くの環境で評価するのが望ましい
まとめて書いてある所なんか無いよ
普通はコンパイラの範疇なものは実行環境に依存しない
一緒に提供しない外部のコードを使う部分(DLL, API, ドライバ)は依存する
と思っておけば良いけど
環境を判断して動作を変えるコードもあるし
実行速度は当然環境に依存する
特定の環境の場合にタイミング依存で発生する問題もある
確実に実行環境に依存しないなんて確証を得られるコードなんてごく限られた範囲になるんで
そんなものに頼らず
出来るだけより多くの環境で評価するのが望ましい
881デフォルトの名無しさん
2018/11/20(火) 10:23:14.85ID:jmuJusIM README (.txt) (.md) (.rst)
882デフォルトの名無しさん
2018/11/21(水) 12:28:30.64ID:kLl3Gqvz 某本で読んだんだけど、クラスの中にポインタ変数もたせる場合って、コピー禁止にするのが一般的?
コピーコンストラクタを書くのがめんどそうだし、そもそもクラスを代入やコピーをあんましないよね?
コピーコンストラクタを書くのがめんどそうだし、そもそもクラスを代入やコピーをあんましないよね?
883はちみつ餃子 ◆8X2XSCHEME
2018/11/21(水) 12:44:01.50ID:5XDVWHjZ >>882
そのクラスがコピーできるようになっているべきかどうかは個別に判断すべき話で、クラスの性質による。
コピーできない (コピーすると不整合が起こる) ようなデザインならコピーするなって言うだけじゃなくて
コピー禁止 (コピーコンストラクタの削除) にしておいたほうがうっかりコピーしなくて安全だねってだけの話。
そのクラスがコピーできるようになっているべきかどうかは個別に判断すべき話で、クラスの性質による。
コピーできない (コピーすると不整合が起こる) ようなデザインならコピーするなって言うだけじゃなくて
コピー禁止 (コピーコンストラクタの削除) にしておいたほうがうっかりコピーしなくて安全だねってだけの話。
884デフォルトの名無しさん
2018/11/21(水) 22:50:19.46ID:QmHGv3o9 排他主義は当然
低学歴知恵遅れは板から排除するベキ
低学歴知恵遅れは板から排除するベキ
885デフォルトの名無しさん
2018/11/21(水) 23:19:14.19ID:xWgjQGqb >>883
> そのクラスがコピーできるようになっているべきかどうかは個別に判断すべき話
これ、全く尤もだし大事な事だと思うんですけど、判断基準を学校や職場で教えてないんですかね?
メモリが少ない組み込み環境だと選択肢はあるけど、C++でアプリを組むような環境だと、
- シングルトンはコピーしない
- それ以外はコピアブル(ディープコピー)にする
一択だと思うんですが。
> そのクラスがコピーできるようになっているべきかどうかは個別に判断すべき話
これ、全く尤もだし大事な事だと思うんですけど、判断基準を学校や職場で教えてないんですかね?
メモリが少ない組み込み環境だと選択肢はあるけど、C++でアプリを組むような環境だと、
- シングルトンはコピーしない
- それ以外はコピアブル(ディープコピー)にする
一択だと思うんですが。
887デフォルトの名無しさん
2018/11/21(水) 23:42:08.80ID:yscr9wE/ >クラスの中にポインタ変数もつ
これは、pimpl (pointer implement)デザインパターンだろ
pimpl インスタンスの遅延初期化だろ。
こういうのは普通コピーしないし、コピーするとインスタンスを共有して危険になるとか
遅延初期化するようなものは、非同期読み込みとか、何か失敗する可能性が高い、ヤバイもの
1回目は、ファイルから読み込んで、2回目は、キャッシュから読み込むとか、挙動が変わったり
pimpl を使っていれば、普通と違うから、ヤバイと思っておいた方がよい。
pimpl を使うには、何か理由がある
これは、pimpl (pointer implement)デザインパターンだろ
pimpl インスタンスの遅延初期化だろ。
こういうのは普通コピーしないし、コピーするとインスタンスを共有して危険になるとか
遅延初期化するようなものは、非同期読み込みとか、何か失敗する可能性が高い、ヤバイもの
1回目は、ファイルから読み込んで、2回目は、キャッシュから読み込むとか、挙動が変わったり
pimpl を使っていれば、普通と違うから、ヤバイと思っておいた方がよい。
pimpl を使うには、何か理由がある
888はちみつ餃子 ◆8X2XSCHEME
2018/11/21(水) 23:50:56.39ID:5XDVWHjZ >>885
原則としてはその意見は正しいと思う。
特別な理由がない限りコピーは出来るべきだ。
その上でコピー可能にするための手間と使い勝手のトレードオフ、
要するに「割に合うか」という判断は実務的なことだから、一律には言えないと思う。
コピー可能に出来るけど、コピーする箇所が一個もなかったわっていうような結末だって
有りうるだろうし。
そういう見極めに簡単な基準を設けられるのなら苦労はないわ。
原則としてはその意見は正しいと思う。
特別な理由がない限りコピーは出来るべきだ。
その上でコピー可能にするための手間と使い勝手のトレードオフ、
要するに「割に合うか」という判断は実務的なことだから、一律には言えないと思う。
コピー可能に出来るけど、コピーする箇所が一個もなかったわっていうような結末だって
有りうるだろうし。
そういう見極めに簡単な基準を設けられるのなら苦労はないわ。
889デフォルトの名無しさん
2018/11/21(水) 23:57:54.13ID:xWgjQGqb >>887
pimplはAPIと実装を切り離して抽象化するためのもんだから、遅延とかキャッシュとか
実装詳細が関係しちゃいけないんじゃないですかね。
例えばマルチエージェントシミュレーションとかで、個々のエンティティの実装をpimplで隠した上に、
エンティティの複製は普通にやりますし。
pimplはAPIと実装を切り離して抽象化するためのもんだから、遅延とかキャッシュとか
実装詳細が関係しちゃいけないんじゃないですかね。
例えばマルチエージェントシミュレーションとかで、個々のエンティティの実装をpimplで隠した上に、
エンティティの複製は普通にやりますし。
890デフォルトの名無しさん
2018/11/21(水) 23:59:15.48ID:xWgjQGqb891デフォルトの名無しさん
2018/11/22(木) 00:03:02.39ID:hDud6tbH >>888
> そういう見極めに簡単な基準を設けられるのなら苦労はないわ。
私は古い教育しか受けてないので、過去については全く同感なんですが、
最近はもっと抽象化してるんじゃないかな、と思ったんですよ。
> そういう見極めに簡単な基準を設けられるのなら苦労はないわ。
私は古い教育しか受けてないので、過去については全く同感なんですが、
最近はもっと抽象化してるんじゃないかな、と思ったんですよ。
892デフォルトの名無しさん
2018/11/22(木) 00:06:21.53ID:LhS8U5R1 今はmoveがあるからとりあえずコピー禁止で作るな。
複製したオブジェクトが必要になる機会はあんまりない気がする。
vectorに突っ込んで連続したメモリに割り当てたいときとかかな。
複製したオブジェクトが必要になる機会はあんまりない気がする。
vectorに突っ込んで連続したメモリに割り当てたいときとかかな。
893デフォルトの名無しさん
2018/11/22(木) 00:16:19.69ID:hDud6tbH >>892
read-copy-updateとか、マルチスレッディングで使うんですよ。
(スレッド間で同じ領域にアクセスすると、誰かが書き込むときにロックが掛かるから、
ポインタの参照先もコピーしてしまった方が良い)
read-copy-updateとか、マルチスレッディングで使うんですよ。
(スレッド間で同じ領域にアクセスすると、誰かが書き込むときにロックが掛かるから、
ポインタの参照先もコピーしてしまった方が良い)
894デフォルトの名無しさん
2018/11/22(木) 00:23:03.19ID:VnO3ZoaR pimpl は、DI(dependency injection)でも使うか
895デフォルトの名無しさん
2018/11/22(木) 00:35:05.56ID:hDud6tbH896デフォルトの名無しさん
2018/11/23(金) 18:17:04.79ID:Fjl6cL2Z でかいオブジェクトはコピーじゃなくてデータベースに入れてリビジョン管理するべきだよな
897デフォルトの名無しさん
2018/11/24(土) 04:02:28.06ID:sj/p1kLr std::shared_ptr。
898デフォルトの名無しさん
2018/11/24(土) 13:15:24.82ID:CDKSSVF4 >>891
コピーコンストラクタって言語機能があるから勘違いしがちだけど
コピーってオブジェクト指向一般的に言えば全くもって汎用的な処理じゃないんだよね
むしろ無理にコピー可を要求するとおかしくなったりパフォーマンスに悪影響することの方が多いぐらいだ
だから、C++より進化したオブジェクト指向言語、例えばC#もJavaもコピーコンストラクタなんてサポートしてないだろ?
なんでまあ、基本的にはコピーはサポートしなくていい
そのクラスの要件としてコピーのサポートが必須だとはっきり分かったときだけサポートすりゃいい
コピーコンストラクタって言語機能があるから勘違いしがちだけど
コピーってオブジェクト指向一般的に言えば全くもって汎用的な処理じゃないんだよね
むしろ無理にコピー可を要求するとおかしくなったりパフォーマンスに悪影響することの方が多いぐらいだ
だから、C++より進化したオブジェクト指向言語、例えばC#もJavaもコピーコンストラクタなんてサポートしてないだろ?
なんでまあ、基本的にはコピーはサポートしなくていい
そのクラスの要件としてコピーのサポートが必須だとはっきり分かったときだけサポートすりゃいい
900デフォルトの名無しさん
2018/11/24(土) 15:11:34.85ID:CDKSSVF4 C#には構造体があるがそれもコピーコンストラクタなどサポートしてないね
オブジェクト指向にはほとんど不要だから
オブジェクト指向にはほとんど不要だから
901デフォルトの名無しさん
2018/11/24(土) 15:48:36.96ID:3CbvFbkZ IClonableが用意されているのはそれが必要だと判断されたからだわな
902デフォルトの名無しさん
2018/11/24(土) 19:04:04.80ID:gWlvrrPg >>897
循環参照や並行処理や、今や制限しか思い浮かばない……
循環参照や並行処理や、今や制限しか思い浮かばない……
903デフォルトの名無しさん
2018/11/25(日) 09:06:53.31ID:lehzCciN コピーコンストラクタなんて使ったことないよ
関数の引数も構造体はポインタで渡すべきだし、関数からの返り値も構造体で返すべきではない
あんなのは使うべきではない
関数の引数も構造体はポインタで渡すべきだし、関数からの返り値も構造体で返すべきではない
あんなのは使うべきではない
904デフォルトの名無しさん
2018/11/25(日) 09:07:39.68ID:lehzCciN =はもちろん実装するけどね
905デフォルトの名無しさん
2018/11/25(日) 18:17:50.26ID:nhPKo8Z8 便利なのに:-P
906デフォルトの名無しさん
2018/11/26(月) 03:48:18.53ID:bwBfDzyf あるクラスのオブジェクトを静的/動的に確保した場合の互いのメンバ関数処理速度の差ってどれくらいなもんですかね
処理の規模にもよるのですか?
処理の規模にもよるのですか?
907デフォルトの名無しさん
2018/11/26(月) 06:54:42.96ID:KQ12hvHn ほぼ無いと思って良い。
908デフォルトの名無しさん
2018/11/27(火) 09:16:27.15ID:SZiCwtOh 今プログラミング言語C++4第四版読んでるのですが、中級者なのですが1ページから読んでます
テンプレートはあまり使ったことがなく、テンプレートの章を読んでいるのですが理解出来ているのか出来ていないのか分かりません
皆さんこの本はどんな感じで読みましたか?
テンプレートはあまり使ったことがなく、テンプレートの章を読んでいるのですが理解出来ているのか出来ていないのか分かりません
皆さんこの本はどんな感じで読みましたか?
909デフォルトの名無しさん
2018/11/27(火) 09:40:16.02ID:jIxWA8zR テンプレートは大分前に読んだが、ぜんぜんスマートだとは思わんかったしプログラムもでかくなりそうだったし
くだらねえと思って、読むのやめたよ。 別に使わなくてもプログラム出来るしな
くだらねえと思って、読むのやめたよ。 別に使わなくてもプログラム出来るしな
910デフォルトの名無しさん
2018/11/27(火) 10:30:40.71ID:90f/RKlc ID:lehzCciN
ID:jIxWA8zR
ちょっとだまってて
ID:jIxWA8zR
ちょっとだまってて
911デフォルトの名無しさん
2018/11/27(火) 17:54:30.60ID:7Rl1V70s テンプレートは書くのはちょっと難しいというかアレだが
使うのは簡単だから、まずstd::vectorとか使ってみれば?便利だから
使い方が分かれば作り方もわかるようになるだろう
あとコピーの話でもめてたようだが、オブジェクトのコピーはC++の特徴だからなぁ
C言語からのもので、構造体が値型と同じようにコピーできるっていう
そのおかげでスタックにオブジェクトを確保してRAIIが出来るまぁこれも特徴的だわ
一方で配列が=でコピーできないのもC言語からのもので
構造体より配列の方が他の言語で言うところのオブジェクトと似たような仕様になってるw
参照するとポインタに格下げになるのもJavaやC#のオブジェクトと一緒だね
使うのは簡単だから、まずstd::vectorとか使ってみれば?便利だから
使い方が分かれば作り方もわかるようになるだろう
あとコピーの話でもめてたようだが、オブジェクトのコピーはC++の特徴だからなぁ
C言語からのもので、構造体が値型と同じようにコピーできるっていう
そのおかげでスタックにオブジェクトを確保してRAIIが出来るまぁこれも特徴的だわ
一方で配列が=でコピーできないのもC言語からのもので
構造体より配列の方が他の言語で言うところのオブジェクトと似たような仕様になってるw
参照するとポインタに格下げになるのもJavaやC#のオブジェクトと一緒だね
912デフォルトの名無しさん
2018/11/27(火) 18:01:09.09ID:7Rl1V70s もしC言語の構造体が配列の仕様と同じように
アクセスしようとするとポインタに格下げになってコピーできない仕様だったのなら
C++のクラスはもうちょっとモダンな仕様になってたかもしれないよね
値渡し出来ないからコピーの事を考えなくてもよいし
GCないからキツイか
アクセスしようとするとポインタに格下げになってコピーできない仕様だったのなら
C++のクラスはもうちょっとモダンな仕様になってたかもしれないよね
値渡し出来ないからコピーの事を考えなくてもよいし
GCないからキツイか
913デフォルトの名無しさん
2018/11/27(火) 19:03:17.02ID:NSs5prW8914デフォルトの名無しさん
2018/11/27(火) 19:33:57.58ID:7Rl1V70s その場合でも、例えばC言語のコンパイラを作りたいとき
C言語の使い方を理解せずにC言語のコンパイラを作るより
C言語の使い方を学習してからC言語のコンパイラを作る方が
賢明だろ
C言語の使い方を理解せずにC言語のコンパイラを作るより
C言語の使い方を学習してからC言語のコンパイラを作る方が
賢明だろ
>>906
性的・童貞的の差異よりも仮性・真性の差異を問題にすべきかと
性的・童貞的の差異よりも仮性・真性の差異を問題にすべきかと
レス数が900を超えています。1000を超えると表示できなくなるよ。
ニュース
- 【前橋市】小川晶前市長とラブホテルで打ち合わせをした54歳男性職員を停職処分 今月末で依願退職するという [シャチ★]
- 【おこめ券】鈴木農相 米価維持の意図「一切ない」★2 [ぐれ★]
- 【埼玉】「無免許で高速道路で事故」トラックの追突事故で10代男性死亡 無免許過失運転致死の疑いでトルコ国籍の男(22)逮捕 戸田市 [ぐれ★]
- バリ島で男子生徒ら集団万引きか、防犯カメラ映像が拡散 京都の大谷中学・高校が「窃盗行為」謝罪★6 [七波羅探題★]
- 広島・廿日市、おこめ券配布せず 全市民に3000円現金給付へ [どどん★]
- 【警視庁】走行中の電車で女性に露出した下半身押しつけたか 無職の男(46)逮捕「チャンスがあればいつでもやる」 [nita★]
- 【実況】博衣こよりのえちえちチーズケーキを仕込み(雑談あり)🧪★2
- じゃあ何券だったら、日本人は満足したんだよ [452836546]
- 【速報】1ポンド210円で日英GDP逆転(残り1.5円)...世界6位の経済規模に転落 [237216734]
- 悪気はないのに、不意に相手を傷付けてしまう事ってあるんだな
- 朝日新聞記者「中国軍のレーダー照射はこめかみに銃を突きつけられたのと同じ。僕なら反撃して撃墜してる」高市 [931948549]
- 僕が未だに紙の単行本を集めてる漫画が「ご注文はうさぎですか?」「ゆるゆり」「大室家」「邪神ちゃんドロップキック」なんだが
